题解 | #第一个只出现一次的字符#
第一个只出现一次的字符
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; } }