美文网首页
Leetcode-387-字符串中的第一个唯一字符

Leetcode-387-字符串中的第一个唯一字符

作者: WindMajor | 来源:发表于2018-08-02 10:36 被阅读27次

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

    案例:

    s = "leetcode"
    返回 0.
    
    s = "loveleetcode",
    返回 2.
    

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


    分析:

    题意很简单,给定字符串从左向右,直到遇到一个是唯一的字符串,返回此索引值就可以。

    解题的思路可以循环遍历做元素是否相同的比较,但这样太费时费力了。
    而根据题目,对于每一个元素只关心是否有重复元素,并不关心有几个重复元素,所以最简单的方法就是利用接口 indexOf() 和 lastIndexOf()两个接口比对结果是否一致。

    解法一:

    List中有indexOf()和lastIndexOf()接口,我们把String字符串里面的每一个字符都放入List中,调用其相应接口进行判断。
    Java解答如下:

        public int firstUniqChar(String s) {
            char[] chars = s.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                char ch = chars[i];
                int index = s.indexOf(ch);
                if (index == s.lastIndexOf(ch)) {
                    return index;
                }
            }
            return -1;
        }
    

    解法二:

    其实转换一下脑子的话,还有更简单的方法,因为把String字符串放入ArrayList中需要耗费不少时间和空间,那么就要想办法避免这些消耗。别忘了题目还给了一个限制条件,字符串都是小写的,那么我们就可以确定字符串中每一个字符的范围是从 az 的,我们可以遍历字符 az,然后判断每一个字符在字符串里面是否存在,如果存在判断其indexOf()和lastIndexOf()的值是否相同,最后在找出index值最小的结果,就是题目所求结果。
    Java解答如下:

        public int firstUniqChar(String s) {
            int result = -1;
            for (char ch = 'a'; ch <= 'z'; ch++) {
                int index = s.indexOf(ch);
                if (index != -1 && index == s.lastIndexOf(ch)) {
                    result = (result == -1) ? index : Math.min(result, index);
                }
            }
            return result;
        }
    

    相关文章

      网友评论

          本文标题:Leetcode-387-字符串中的第一个唯一字符

          本文链接:https://www.haomeiwen.com/subject/lcrjvftx.html