LeetCode 字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。

案例:

s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.
 

注意事项:您可以假定该字符串只包含小写字母。
解法一:

暴力求解,两层 for 循环寻找所求字符的下标。

    public int firstUniqChar(String s) {
        int flag = 1;
        int res = -1;
        if (s.length() == 1) {
            return 0;
        }
        for (int i = 0; i < s.length(); i++) {
            flag = 1;
            for (int j = 0; j < s.length(); j++) {
                if (i != j && s.charAt(j) == s.charAt(i)) {
                    flag = 0;
                    break;
                }
            }
            if (flag == 1) {
                res = i;
                break;
            }
        }
        return res;
    }
解法二:

利用字符串全是小写字母的特性,构造一个记录 a~z 字符个数的数组,然后遍历字符串进行判断。

    public int firstUniqChar(String s) {
        int[] temp = new int[26];
        for (int i = 0; i < s.length(); i++) {
            temp[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < s.length(); i++) {
            if (temp[s.charAt(i) - 'a'] == 1)
                return i;
        }
        return -1;
    }
解法三:

同样利用全是小写字母的特性,获取每个 a~z 每个字母的首下标,再利用 String.lastIndexOf(char c) 获取该字母最后一次出现的下标,两者进行比较得到最小的那个。

    public int firstUniqChar(String s) {
        int result = -1;
        for (char c = 'a'; c <= 'z'; c++) {
            int index = s.indexOf(c);
            if (index != -1 && index == s.lastIndexOf(c)) {
                result = result != -1 ? Math.min(result, index) : index;
            }
        }
        return result;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容