提起された質問
文字列を指定して、最初の一意の文字を見つけ、そのインデックスを返します。存在しない場合は-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%を打ち負かしました