[今日の1つの質問] Likou 387:文字列の最初のユニークな文字

タイトルの説明(ポータル

文字列を指定して、最初の一意の文字を見つけ、そのインデックスを返します。存在しない場合は-1が返されます。

s = "leetcode"
返回 0

s = "loveleetcode"
返回 2

アイデア

二次元配列

26 * 2の2次元配列を作成し、それを行列として扱います。最初の行には、文字列内の位置に対応する文字列の各文字の添え字が格納され、2番目の行にはその出現回数が格納されます。これは、最初のforループでもあります。
2番目のforループは、配列の2番目の行をトラバースし、数値が1の場合、最初の行の添え字を返します。

 public int firstUniqChar(String s) {
    
    

        //char[] array = s.toCharArray();
        int[][] index = new int[26][2];
        for (int i = 0; i < s.length(); i++) {
    
    
            index[s.charAt(i) - 'a'][0] = i;
            index[s.charAt(i) - 'a'][1] = index[s.charAt(i) - 'a'][1] + 1;
        }
        for (int i = 0; i < s.length(); i++) {
    
    
            if (index[s.charAt(i)-'a'][1] == 1) {
    
    
                return index[s.charAt(i)-'a'][0];
            }
        }
        return -1;

    }

HashMap

ハッシュテーブルを介して出現回数をカウントし、トラバースして検索します

public int firstUniqChar(String s) {
    
    
        Map<Character, Integer> map = new HashMap();
        char[] chars = s.toCharArray();
        //先统计每个字符的数量
        for (char ch : chars) {
    
    
            map.put(ch, map.getOrDefault(ch, 0) + 1);
        }
        //然后在遍历字符串s中的字符,如果出现次数是1就直接返回
        for (int i = 0; i < s.length(); i++) {
    
    
            if (map.get(chars[i]) == 1) {
    
    
                return i;
            }
        }
        return -1;
    }


indexOf && lastIndexOf API

ここに画像の説明を挿入
ここに画像の説明を挿入

 public int firstUniqChar(String s) {
    
    
        for (int i = 0; i < s.length(); i++) {
    
    
            if (s.indexOf(s.charAt(i)) == s.lastIndexOf(s.charAt(i))) {
    
    
                return i;
                }
        }
        return -1;
    }

おすすめ

転載: blog.csdn.net/weixin_45532227/article/details/111582591