1、题目描述:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).
2、思路:这道题直接使用hash表,存储每个字符出现的次数,第一次遍历,统计每个字符出现的次数,并存储。第二次遍历找到第一次遇到次数为1的那个字符。
3、代码:
import java.util.HashMap; public class Solution { public static void main(String[] args) { String s="abcddfasdf"; System.out.println(FirstNotRepeatingChar(s)); } public static int FirstNotRepeatingChar(String str) { char[] c = str.toCharArray(); HashMap<Character, Integer> map = new HashMap<Character, Integer>(); int index=-1; if(str==null || str.length()==0){ return -1; } //第一次遍历,统计字符次数 for(int i=0;i<c.length;i++){ if(map.containsKey(c[i])){ int count = map.get(c[i]); count++; map.put(c[i],count); }else{ map.put(c[i],1); } } //第二次遍历,找到第一次出现一次的字符 for(int j=0;j<c.length;j++){ if(map.get(c[j])==1){ index=j; break; } } return index; } }
注意:输入鲁棒性校验