题解 | #第一个只出现一次的字符#
第一个只出现一次的字符
http://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c
暴力求解,遍历字符串判断当前字符是否出现过
解法1:设置flag标记数组标记状态,如果当前字符未出现过且判断已经到达末尾,则只出现过一次
public class Solution { public int FirstNotRepeatingChar(String str) { boolean flag[]=new boolean[str.length()]; for(int i=0;i<str.length();i++){ for(int j=i+1;j<str.length();j++){ if(str.charAt(i)==str.charAt(j)){ flag[j]=true;flag[i]=true;//不符合题意,标记为重复字符 break;//跳出当前循环开始下一个字符的判断 } if(j==str.length()-1&&str.charAt(i)!=str.charAt(j)&&flag[i]==false){ return i;//判断已经到达字符末尾且当前字符还未出现过,符合 } } } return -1;//全都重复 } }
解法2:用哈希表存储字符串每个字符出现的次数,然后从前往后遍历字符串,找出第一个出现次数次数为一的字符
import java.util.*; public class Solution { public int FirstNotRepeatingChar(String str) { HashMap<Character,Integer> map=new HashMap(); for(int i=0;i<str.length();i++){//遍历字符串,hashmap的key保存字符,value为出现的次数 if(map.containsKey(str.charAt(i))){ int count=map.get(str.charAt(i))+1; map.put(str.charAt(i),count); } else{ map.put(str.charAt(i),1); } } for(int i=0;i<str.length();i++){//寻找第一个出现一次的字符 if(map.get(str.charAt(i))==1){ return i; } } return -1; } }