在一个字符串(1<=字符串长度<=10000,全部由大小写字母组成)中找到第一个只出现一次的字符,并返回它的位置
1 #include<iostream> 2 #include<vector> 3 #include<map> 4 #include<string> 5 #include<unordered_map> 6 using namespace std; 7 8 int main() 9 { 10 unordered_map<char, int> m; 11 string str=""; 12 cin>>str; 13 int len = str.size(); 14 //cout << len << endl; 15 unordered_map<char, int>::iterator ite; 16 for (int i = 0; i < len; i++) 17 { 18 m.insert(pair<char, int>(str[i], 0)); 19 } 20 /*for (ite = m.begin(); ite != m.end(); ++ite) 21 { 22 cout << ite->first << " " << ite->second << endl; 23 }*/ 24 for (int i = 0; i < len; i++) 25 { 26 m[str[i]]++; 27 } 28 //for (ite = m.begin(); ite != m.end(); ++ite) 29 //{ 30 // cout << ite->first << " " << ite->second << endl; 31 //} 32 char c; 33 for (int i = 0; i <m.size(); i++) 34 { 35 if (m[str[i]] == 1) 36 c = str[i]; 37 } 38 // cout << c << endl; 39 int x; 40 for (int i = 0; i < len; i++) 41 { 42 if (c == str[i]) 43 x = i; 44 } 45 cout << x+1 << endl; 46 system("pause"); 47 return 0; 48 }
上面的是我写的,自己的ide可以过去,没有提交,看到一个算法,思路清晰,也比较简单,放在下面。
1 #include<iostream> 2 #include<vector> 3 #include<map> 4 #include<string> 5 #include<unordered_map> 6 using namespace std; 7 8 int main() 9 { 10 string str; 11 cin >> str; 12 int x; 13 for (int i = 0; i < str.size(); i++) 14 { 15 if (str.find(str[i]) == str.rfind(str[i])) 16 { 17 x = i; 18 break; 19 } 20 } 21 cout << x + 1 << endl; 22 system("pause"); 23 return 0; 24 }