私の解決策:
unordered_mapとベクターを使用する
unordered_mapとmapの違いに注意してください。
マップ内の要素は、二分探索木に従って格納され、中位トラバーサルを使用して、キー値を小さい値から大きい値にトラバースできます。(赤黒木
は内部的に実装されています)unordered_mapは内部的にハッシュテーブル(ハッシュテーブルとも呼ばれます)を実装しており、キーコード値をハッシュテーブル内の場所にマッピングすることによってレコードにアクセスします。検索の時間の複雑さはO(1)に達する可能性があります。 、大規模なデータ処理で広く使用されています)。要素の配置順が乱れています。(挿入順ではなく、順不同です。この質問は挿入順に行われたと思っていたので、最初の例では通じませんでした...長い間探していました)
PS:私はまだ赤と黒の木を知りませんので、学ぶ必要があります!学ぶ!
class Solution {
public:
char firstUniqChar(string s) {
if(s.empty()) return ' ';
unordered_map<char,int> m;
vector<char> vec;
for(char c:s){
if(m.count(c)) m[c]++;
else{
vec.push_back(c);
m[c]=1;
}
}
for(int i=0;i<vec.size();i++){
if(m[vec[i]]==1) return vec[i];
}
return ' ';
}
};