字串中的第一個唯一字元 C++演算法 leetcode387
阿新 • • 發佈:2018-11-10
題目:字串中的第一個唯一字元
給定一個字串,找到它的第一個不重複的字元,並返回它的索引。如果不存在,則返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
注意事項:您可以假定該字串只包含小寫字母。
解答:
用雜湊表建立每個字元和其出現次數的對映,然後按順序遍歷字串,找到第一個出現次數為1的字元,返回其位置即可。
程式碼示例:
1.封裝類
class Solution { public: int firstUniqChar(string s) { unordered_map<char, int> m; for (char c : s) m[c]++; for (int i = 0; i < s.size(); ++i) { if (m[s[i]] == 1) return i; } return -1; } };
分析:unordered_map<char, int> m;
這行程式碼建立一個容器,內部資料結構為雜湊表
for (char c : s)
定義一個遍歷字元c,讓它分別等於字串陣列s裡面的各個字元,然後執行下面的語句.當c被賦值為chars裡面所有字元各一次後,就會退出這個迴圈
m[c]++;計算雜湊表裡出現相同字母的次數
之後的for()迴圈,判斷第一次出現唯一出現的字母,若有返回i值(字母所處位置),若沒有,返回-1.
2.標頭檔案
#include<iostream> #include<string> #include <unordered_map> using namespace std;
3.主函式
int main()
{
string a = "loveleetcode";
class Solution pt;
int b = pt.firstUniqChar(a);
cout << b << endl;
}
分析:定義變數,用類處理,輸出結果。
寫的程式碼都在VS2015下測試沒有問題,如果輸入為string a = "loveleetcode";
該題所有測試程式碼如下
#include<iostream> #include<string> #include <unordered_map> using namespace std; class Solution { public: int firstUniqChar(string s) { unordered_map<char, int> m; for (char c : s) m[c]++; for (int i = 0; i < s.size(); i++) { if (m[s[i]] == 1) return i; } return -1; } }; int main() { string a = "loveleetcode"; class Solution pt; int b = pt.firstUniqChar(a); cout << b << endl; }