微软算法100题17 字符串中找到第一个只出现一次的字符

第17 题:
题目:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

思路:要找出只出现一次的字符,很明显需要统计所有字符出现的次数,然后找出次数为一的那一个,统计次数最先想到的是hashTable,但此题有更好的办法,因为每个char其实对应一个唯一的ASCII值,所以可以构造一个包含所有字符ASCII值的int数组,来映射字符与出现次数的关系,同时一个char是8个字节,总共有256个可能,所以该数组的大小应为256

 1 package com.rui.microsoft;
 2
 3 public class Test17_CharStatistics {
 4
 5     public static void main(String[] args) {
 6         String orig = "abaccdeff";
 7         char res = find(orig);
 8         System.out.println(res);
 9     }
10
11     public static char find(String s){
12         char res = 0;
13
14         int[] in = new int[256];
15
16         for(int i = 0; i < s.length(); i++){
17             char tmp = s.charAt(i);
18             in[tmp]++;
19         }
20         int start = 0;
21         for(; start<in.length; start++){
22             if(in[start] == 1)break;;
23         }
24         res = (char)start;
25         return res;
26     }
27
28 }
时间: 2024-11-29 01:30:26

微软算法100题17 字符串中找到第一个只出现一次的字符的相关文章

17.在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4261992.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b . 题目分析: 求字符串的某个字符出现的次数可以很巧妙的运用split("字符&

【编程题目】在一个字符串中找到第一个只出现一次的字符。如输入 abaccdeff,则输出 b。

第 17 题(字符串):题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 思路:此题非常容易. 最开始是想开辟一块空间存储每个字符出现的次数. 但转念一想,似乎没有必要. 对每一个字符,都依次和后面的比较,若出现了两次,则检查下一个字符,遇到只出现一次的,直接输出就好了. /* 第 17 题(字符串): 题目:在一个字符串中找到第一个只出现一次的字符.如输入 abaccdeff,则输出 b. 分析:这道题是 2006 年 google 的一道笔试题. */

在一个字符串中找到第一个只出现一次的字符

题目:在一个字符串中找到第一个只出现一次的字符. 例如: 输入abaccdeff,则输出b 思路剖析: 由于题目与字符出现的次数相关,可以统计每个字符在该字符串中出现的次数. 要达到这个目的,需要一个数据容器来存放每个字符出现的次数. 在这个数据容器中可以根据字符来查找它出现的次数.在常用的数据容器中,哈希表正是这个用途. 由于字符是一个长度为8的数据类型,因此总共有256种可能.于是我们创建一个长度为256的数组,每个字母根据其ASCII码值作为数组的下标对应数组的对应项.而数组中存储的是每个

在一个字符串中找到第一个只出现一次的字符。

题目:在一个字符串中找到第一个只出现一次的字符.如输入abaccdeff,则输出b. 分析:这道题是2006年google的一道笔试题. 下面给我的解法,采用linkedhashmap的有序,即可实现 private void getOne(String str){ LinkedHashMap<String, Object> linked=new LinkedHashMap<String, Object>(); for (char charstr : str.toCharArray

一个字符串中找到第一个只出现一次的字符

题目描述: 在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符. 如输入 abaccdeff,则输出 b. 输入: 输入有多组数据每一组输入一个字符串. 输出: 输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1 我们这里有两种解题思路 1.蛮力法. 遍历数组,每找到一个字符是遍历一下整个数组,看看该字符是否存在数组下表不一致,但是ASSIC码值一样的字符还存在,如果不存在,则是返回该字符,如果存在,则继续遍历.该算法的时间复杂度为O(n

在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b

偶然在群里看到这个小题, 就用python做了做. 思路就是建一个够大的列表并初始化,把每个字符的asc码作为下标,存到列表里, 然后该位置的值就存字母的出现次数, 最后再迭代原字符串并判断列表值是否等于1. 输出第一个值为1的字符即可. ps:ord()是把字符串转换为它的asc码. 实现如下: def welcome(p_str): bit_map = [0 for x in range(1000)] temp = p_str for a in temp: bit_map[ord(a)] +

在一个字符串中找到第一个仅仅出现一次的字符

Google 2006年的一道笔试题,难度系数低 题目描写叙述: 在一个字符串中找到第一个仅仅出现一次的字符.如输入abaccdeff,则输出b. 逻辑分析: 1.简单粗暴O(n^2),一个显而易见的想法是像冒泡排序一样,採用两个循环,内层循环对外层判定元素arr[i]进行轮询,当发现arr[i] == arr[j]时,本次循环终止,显然,时间复杂度O(n^2),不使用额外空间. #include <stdio.h> #include <stdlib.h> #include <

给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1。

1. 给定一个字符串,找到第一个只出现一次的字符的下标,找不到输出-1. sample: 输入:"abcdefcba" 输出:3 解法:先遍历字符串,用一个map记录每个字符出现的次数,再次遍历字符串,找到第一个只出现一次的字符,复杂度为O(n). #include <iostream> #include <string> #include <cstring> #include <map> using namespace std; int

微软算法100题20 字符串转整数 atoi

第20 题:题目:输入一个表示整数的字符串,把该字符串转换成整数并输出.例如输入字符串"345",则输出整数345 思路:atoi 主要考虑的是对输入的校验和边界处理,以及处理正负符号等 1 package com.rui.microsoft; 2 3 public class Test20_String2Int { 4 5 public static void main(String[] args) { 6 int sum = Test20_String2Int.convert(&q