面试题 找到字符串中第一个只出现一次的字符
2012-12-17 23:04
183 查看
简单面试题
http://blog.csdn.net/geniusluzh/article/details/8248988
这道题的确切描述是:一个字符串的长度小于10^4,只由大写字母组成,让你找到第一个只出现一次的字符的下标。比如ABACC,那么结果就是1。如果我们需要在O(N)的时间复杂度和O(1)的空间复杂度内解决该题,有什么好的办法呢?
之前看到别人描述这道题的时候,题意描述的有点不确切,所以没有什么好的思路。但是现在一看到这个描述,思路就很明确了。只有大写字母,那么我们使用一个整型进行位压缩来记录一个每个字符是否出现。我们只需要用两个整型数便能够压缩整个字符串的状态,一个数用来表示对应位的字母是否出现,另外一个表示对应位的字母是否重复出现,扫两边字符串就能够得到结果了!那么显然达到了时间复杂度为O(N),空间复杂度为O(1)的要求。
具体实现的细节可以看代码!
http://blog.csdn.net/geniusluzh/article/details/8248988
这道题的确切描述是:一个字符串的长度小于10^4,只由大写字母组成,让你找到第一个只出现一次的字符的下标。比如ABACC,那么结果就是1。如果我们需要在O(N)的时间复杂度和O(1)的空间复杂度内解决该题,有什么好的办法呢?
之前看到别人描述这道题的时候,题意描述的有点不确切,所以没有什么好的思路。但是现在一看到这个描述,思路就很明确了。只有大写字母,那么我们使用一个整型进行位压缩来记录一个每个字符是否出现。我们只需要用两个整型数便能够压缩整个字符串的状态,一个数用来表示对应位的字母是否出现,另外一个表示对应位的字母是否重复出现,扫两边字符串就能够得到结果了!那么显然达到了时间复杂度为O(N),空间复杂度为O(1)的要求。
具体实现的细节可以看代码!
#include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> using namespace std; const int MAX = 10010; int in, re; char s[MAX]; void inline set_k(int &n, int k) { n |= (1<<k); } bool inline test_k(int n, int k) { if((n&(1<<k)) == 0) return false; else return true; } int main() { while(scanf("%s", s) != EOF) { re = in = 0; int len = strlen(s); for(int i=0; i<len; i++) { int k = s[i] - 'A'; if(test_k(in, k)) { set_k(re, k); } else { set_k(in, k); } } int ans = -1; for(int i=0; i<len; i++) { int k = s[i] - 'A'; if(!test_k(re, k)) { ans = i; break; } } printf("%d\n", ans); } return 0; }
相关文章推荐
- 面试题41:从字符串中找到第一个只出现一次的字符
- 面试题41:从字符串中找到第一个只出现一次的字符
- 15. Google面试题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 算法与数据结构面试题(21)-在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符。
- 【练习】在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- 在一个字符串中找到第一个只出现一次的字符
- 【C语言【面试题】【笔试题】题目:在字符串中找出第一个只出现一次的字符。
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
- 在一个字符串中,找到第一个只出现一次的字符,例如:abaccdef,输出b
- 一个字符串中找到第一个只出现一次的字符
- 数据结构——算法之(007)(在一个字符串中找到第一个只出现一次的字符)
- 在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b;
- 在一个字符串中找到第一个只出现一次的字符
- offer-35在一个字符串中找到第一个只出现一次的字符
- 在一个字符串中找到第一个只出现一次的字符(java实现)
- 每日一道算法题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
- AS3 面试题35 在一个字符串中找出第一个只出现一次的字符