387.文字列の最初の一意文字Leetcode


文字列を指定して、最初の重複しない文字を見つけて、インデックスを返します.存在しない場合は-1を返します.
ケース:
s=「leetcode」は0を返します.
s=「loveleetcode」は、2.
注意事項:この文字列には小文字だけが含まれていると仮定してもいいです.
//     o(n^2)     【  】
class Solution {
    public int firstUniqChar(String s) {
        
        int n = s.length();
        
        for(int i = 0; i < n; i++){
            boolean flag = true; //          
            for(int j = 0; j < n; j++){
                if(s.charAt(i) == s.charAt(j) && i != j){ //        ,    
                    flag = false;
                    break;
                }
            }
            if(flag == true)
                return i;
        }
        return -1;
    }
}

/*
  :O(n)
    【HashMap】
                
               1   
*/
class Solution{
    public int firstUniqChar(String s){
        
        int n = s.length();
        Map<Character, Integer> charMap = new HashMap<Character, Integer>(n); //      ,          
        
        for(int i = 0; i < n; i++){
            if(!charMap.containsKey(s.charAt(i))){
                charMap.put(s.charAt(i), 1);
            }else{
                charMap.put(s.charAt(i), charMap.get(s.charAt(i)) + 1);
            }
        }
        
        for(int i = 0; i < n; i++){
            if(charMap.get(s.charAt(i)) == 1)
                return i;
        }
        return -1;
    }
}



class Solution{
    public int firstUniqChar(String s){
        
        int n = s.length();
        char[] array = s.toCharArray();
        int[] a = new int[26]; //a[]         ,        
        
        for(int i = 0; i < n; i++){
            a[array[i] - 'a']++;
        }
        
        for(int i = 0; i < n; i++){
            if(a[array[i] - 'a'] == 1)
                return i;
        }
        return -1;
    }
}