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;
    }
}

注意:输入鲁棒性校验

12-14 18:29
查看更多