- 题目描述:
-
在一个字符串(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