[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 ****************************************************************/

 

 

 

posted @ 2014-04-04 15:32  Eason Liu  阅读(245)  评论(0编辑  收藏  举报