题解 | #第一个只出现一次的字符#
第一个只出现一次的字符
http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c
1.先遍历一次字符串,得到存储字符+出现次数的hashmap,和第一次出现的字符的集合(按顺序)ArrayLst
2.遍历字符集合,去hashmap中取次数,如果为1,结束遍历,得到第一次出现的字符
3.再遍历字符串,得到第一次出现的字符的索引
import java.util.ArrayList;
import java.util.HashMap;
public class Solution {
public int FirstNotRepeatingChar(String str) {
//记录一下字符出现的顺序
ArrayList result=new ArrayList();
//消重的思路,你想保序的话,就用set做判定,用list接收,否则直接用set接收
//用hashmap
HashMap res=new HashMap();
for (int i = 0; i < str.length(); i++) {
char now=str.charAt(i);
//如果第一次取得该字符
if(res.get(now)==null){
result.add(now);
res.put(now,1);
}
//如果不是第一次,次数加一
else {
res.put(now,res.get(now)+1);
}
}
//得到第一次出现的字符
Character fin = null;
for (Character x:result) {
if(res.get(x)==1){
fin=new Character(x);
break;
}
}
//得不到返回-1
if(fin==null){
return -1;
}
int location = 0;
for (int i = 0; i <str.length() ; i++) {
if(str.charAt(i)==fin){
location=i;
}
}
return location;
}
}
