[Jobdu] 题目1283:第一个只出现一次的字符
- 题目描述:
-
在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。
- 输入:
-
输入有多组数据
每一组输入一个字符串。
- 输出:
-
输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。
- 样例输入:
-
ABACCDEFF AA
- 样例输出:
-
1 -1
用一个HashMap即可,因为输入为ascii码,所以只要用一个大小为256的数组就行。还有一个题是只有一个出现一次,其它都出现两次,找到出现一次的。据说是Google面试题,想法就是把char看作int,然后用xor操作。
1 #include <iostream> 2 #include <string> 3 #include <cstring> 4 using namespace std; 5 6 int main() { 7 string s; 8 int a[256]; 9 while (cin >> s) { 10 memset(a, 0, sizeof(a)); 11 int t = 0; 12 for (int i = 0; i < s.length(); ++i) { 13 ++a[s[i]]; 14 } 15 bool flag = false; 16 for (int i = 0; i < s.length(); ++i) { 17 if (a[s[i]] == 1) { 18 flag = true; 19 cout << i << endl; 20 break; 21 } 22 } 23 if (!flag) cout << "-1" << endl; 24 } 25 return 0; 26 } 27 /************************************************************** 28 Problem: 1283 29 User: hupo250 30 Language: C++ 31 Result: Accepted 32 Time:80 ms 33 Memory:1520 kb 34 ****************************************************************/