NC31:第一个只出现一次的字符

第一个只出现一次的字符

http://www.nowcoder.com/questionTerminal/1c82e8cf713b4bbeb2a5b31cf5b0417c

思路1:数组

    public static int FirstNotRepeatingChar3(String str) {
        int len = str.length();
        if (len == 0) {
            return -1;
        }
        char[] s = str.toCharArray();
        int[] m = new int[256];
        for (int i = 0; i < len; i++) {
            m[s[i]]++;
        }
        for (int i = 0; i < len; i++) {
            if (m[s[i]] == 1) {
                return i;
            }
        }
        return -1;
    }

思路2:哈希
先在hash表中统计各字母出现次数,第二次扫描直接访问hash表获得次数

    public static int FirstNotRepeatingChar2(String str) {
        if (str.length() == 0) {
            return -1;
        }
        char[] chars = str.toCharArray();//toCharArry():把字符串转为char字符数组;
        HashMap<Character, Integer> map = new HashMap<>();

        for (char c : chars) {
            if (map.containsKey(c)) {
                map.put(c, map.get(c) + 1);
            } else {
                map.put(c, 1);
            }
        }

        for (int i = 0; i < str.length(); i++) {
            if (map.get(str.charAt(i)) == 1) {
                return i;
            }
        }
        return -1;
    }
名企高频面试算法题解 文章被收录于专栏

牛客题霸 - 程序员面试高频题 - 题解

全部评论

相关推荐

kyw_:接好运
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务