剑指offer三十四之第一个只出现一次的字符

一、题目

  在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置

二、思路

  详见代码注释。

三、代码

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;


public class Solution {
    public int FirstNotRepeatingChar(String str) {
        if(str==null||str.length()==0){
            return -1;
        }
        
        //统计字符串的个数,注意用LinkedHashMap
        LinkedHashMap<Character, Integer> lhm = new LinkedHashMap<Character, Integer>();
        for (char c : str.toCharArray()) {
            if (lhm.containsKey(c)) {
                lhm.put(c, lhm.get(c) + 1);
            } else {
                lhm.put(c, 1);
            }
        }

        //遍历map,寻找第一个只出现一次的数
        int num = 0;
        Set<Map.Entry<Character, Integer>> set = lhm.entrySet();
        for (Map.Entry<Character, Integer> es : set) {
            char key = es.getKey();
            int value = es.getValue();
            if (value == 1) {
                num = key;
                break;
            }
        }

        //查找索引index
        int index=0;
        
        for(int i=0;i<str.length();i++){
            if(str.charAt(i)==num){
                index=i;
                break;
            }
        }
        
        //返回索引的位置
        return index;
    }
}
View Code

---------------------------------------------

参考链接:

https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c?tpId=13&tqId=11187&rp=2&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

 

posted @ 2017-10-12 02:09  AI菌  阅读(243)  评论(0编辑  收藏  举报