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

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

案例:
s = "leetcode"
返回 0.

s = "loveleetcode",
返回 2.

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

解法1:

思路:把字符串使用toCharArray()转换成字符数组,遍历字符数组,使用LinkedHashMap (顺序不变)以字符为key,字符在字符串中的索引为value,如果key出现不只一次则对应的value置为-1。最后使用entrySet方法遍历map,把第一个value不为-1的value返回,如果遍历结束没有发现有符合要求的,返回-1.

class Solution {
    public int firstUniqChar(String s) {
       Map<Character,Integer> map=new LinkedHashMap<Character,Integer>();
        char[] array=s.toCharArray();
        int n=array.length;
        for(int i=0;i<n;i++){
            if(!map.containsKey(array[i])){
                map.put(array[i],i);
            }else{
                map.put(array[i],-1);
            }
        }
        
        for(Map.Entry<Character,Integer> entry : map.entrySet()){
            if(entry.getValue()!=-1){
                return entry.getValue();
            }
        }
     return -1;  
    }
}

解法2:

思路:leetcode高效率答案,使用indexOf(),lastIndexOf()等方法。

class Solution {
    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;
    }
}

注意:总结 java的集合,entrySet这两块知识。

    原文作者:coder_flag
    原文地址: https://www.jianshu.com/p/6a4b0a65b644
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞