1. 程式人生 > >33、第一個只出現一次的字元

33、第一個只出現一次的字元

題目描述:

  在字串中找出第一個只出現一次的字元。如輸入"abaccdeff",則輸出’b’。要求時間複雜度為O(n)。

解題思路:

  為了解決這個問題,我們可以定義一個雜湊表(外部空間),其鍵值(Key)是字元,而值(Value)是該字元出現的次數。

  同時我們還需要從頭開始掃描字串兩次:

1. 第一次掃描字串時,每掃描到一個字元就在雜湊表的對應項中把次數加1。(時間效率O(n))。

2. 第二次掃描時,每掃描到一個字元就能從雜湊表中得到該字元出現的次數。這樣第一個只出現一次的字元就是符合要求的輸出。(時間效率O(n))。

Demo:

class
Solution { public: int FirstNotRepeatingChar(string str) { // 用雜湊表記錄下字元和次數 unordered_map<char, int> mp; for (auto s : str) mp[s]++; int index = -1, sz = str.size(); for (int i = 0; i < sz; ++i) { auto tmp = mp.find(str[i]); // 如果能找到該字元且出現一次則記錄下標退出 if ( tmp != mp.
end() && tmp->second == 1) { index = i; break; } } return index; } }; /* int FirstNotRepeatingChar(string str) { vector<int> vec(256, 0); int tmp; for (auto s : str) { tmp = s; vec[tmp]++; } int index = -1; for (int i = 0; i < str.size(); ++i) { tmp = str[i]; if (vec[tmp] == 1) { index = i; break; } } return index; } */