- 题目描述:
-
在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符。
- 输入:
-
输入有多组数据
每一组输入一个字符串。
- 输出:
-
输出第一个只出现一次的字符下标,没有只出现一次的字符则输出-1。
样例输入:
ABACCDEFF AA样例输出:
1 -1【解题思路】本题有很多思路可以做,包括map set 排序等应用,但,时间却是个问题。既然提到了字母,我们不妨用最原始的方法,统计每个字母出现的次数,然后按照字母的输入次序遍历26个字母,当某一个字母的次数为1则该字母为所求,否则不存在这样的字母。
AC code:
#include <cstdio>
#include <vector>
#include <cstring>
using namespace std;
int main()
{
char cc[10002];
while(scanf("%s",cc)!=EOF)
{
vector<int> alpnum(26,0);
vector<int> vecin;
int ll=strlen(cc);
for(int i=0;i<ll;++i){
++alpnum[cc[i]-'A'];
vecin.push_back(cc[i]-'A');
}
int i;
for(i=0;i<vecin.size();++i)
if(alpnum[vecin[i]]==1)
{
printf("%d
",vecin[i]);
break;
}
if(i==vecin.size())
printf("-1
");
}
return 0;
}
/**************************************************************
Problem: 1283
User: huo_yao
Language: C++
Result: Accepted
Time:20 ms
Memory:1024 kb
****************************************************************/
题目链接:http://ac.jobdu.com/problem.php?pid=1283九度-剑指Offer习题全套答案下载:http://download.csdn.net/detail/huoyaotl123/8276299