firstUniqChar-文字列の最初の一意の文字(java)

提起された質問

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

例:

s = "leetcode"
は0を返します

s = "loveleetcode"
は2を返します

ヒント:文字列には小文字のみが含まれていると想定できます。
関連トピックハッシュテーブル文字列

崩壊

タイトルによって促されたハッシュテーブルによると、次の問題解決のアイデアを考えるのは簡単
です。1.HashMapではなくLinkedHashMapを作成します。LinkedHashMapはキー入力を維持できるため、更新の順序は変更されません。
Map<Character, List<Integer>> map=new LinkedHashMap<>();
フォーマットは1つずつトラバースされ、マップに配置されます。最初のパラメーターは、文字列のさまざまな要素の文字値、2番目のレコード位置
2です。マップの値が複数ある場合、つまり、リストに複数ある場合は、マップをトラバースし続けます。 、最初の値に値が1つしかないかどうかを確認します。はい、sでその位置を見つけます。

コードデモ:

class Solution {
    public int firstUniqChar(String s) {
        Map<Character, List<Integer>> map=new LinkedHashMap<>();
        for (int i = 0; i < s.length(); i++) {
            List<Integer> list;
            if(map.get(s.charAt(i))==null)
                list=new ArrayList<>();
            else
               list= map.get(s.charAt(i));
            list.add(i);
            map.put(s.charAt(i),list);
        }
        Set<Map.Entry<Character, List<Integer>>> entries = map.entrySet();
        Iterator<Map.Entry<Character, List<Integer>>> iterator = entries.iterator();
        while (iterator.hasNext())
        {
            Map.Entry<Character, List<Integer>> next = iterator.next();
            if(next.getValue().size()!=1)
                continue;
            return s.indexOf(String.valueOf(next.getKey()));
        }
        return -1;
    }
}

効果的ではない)

情報の
回答は成功しました:
実行時間:55ミリ秒、Javaユーザーの5.33%を打ち負かしました
メモリ消費量:40.8 MB、Javaユーザーの5.04%を打ち負かしました

おすすめ

転載: blog.csdn.net/tangshuai96/article/details/111575188