题目描述(来自剑指offer):
在一个字符串(1<=字符串长度<=10000,全部由字母组成)
中找到第一个只出现一次的字符,并返回它的位置。如果字符串为空,返回-1
思路:(利用java的linkedHasMap,保证了字符串的顺序)
在一个字符串(1<=字符串长度<=10000,全部由字母组成)
中找到第一个只出现一次的字符,并返回它的位置。如果字符串为空,返回-1
思路:(利用java的linkedHasMap,保证了字符串的顺序)
第一次遍历:使Map中 key保存字符,value保存字符出现的频数,
第二次遍历:找到value为1的那个下标,将其返回例如:
输入:str={"gogoup"}
输出:4
代码如下:
public int solve(String str)
{
if(str == null|| str.isEmpty())
return -1;
char[] ch = str.toCharArray(); //用linkedHashMap可以保证顺序
Map
map = new LinkedHashMap
();
for(char i : ch) //第一次遍历,设置键值对
{
Integer freq = map.get(i);
map.put(i, (freq==null? 1:freq + 1));
}
for(int i=0; i!= ch.length; i++)//第二次遍历,读取值为1的数,返回索引
{
if (map.get(ch[i])==1)
return i;
}
return -1;
}