剑指offer面试题目:第一个只出现一次的字符
来源:互联网 发布:seo关键词优化工具 编辑:程序博客网 时间:2024/06/06 03:53
题目
在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b。
分析
方法一:
简单粗暴O(n^2),一个显而易见的想法是像冒泡排序一样,采用两个循环,内层循环对外层判定元素arr[i]进行轮询,当发现arr[i] == arr[j]时,本次循环终止,显然,时间复杂度O(n^2),不使用额外空间。
方法二:
上述做法虽然可行,不过O(n^2)的时间复杂度显然不理想,我们需要换个思路,考虑一下如何将时间复杂度降为O(n),必要时可以用空间来换。直观上,我们只想遍历一次字符串(即单层循环),那么必然就需要将某些信息记录下来,这里记录的当然就是每个字符出现的次数。对于字符串来讲,一般采用哈希表,然后对哈希表进行查询即可。本题针对字符串为小写字母形式,所以可以简单的采用int hashtable[26] = {0};来做存储。
代码
方法一:
#include <stdio.h> #include <stdlib.h> #include <string.h> void findSingle(char *arr, int len) { int i,j; for(i=0;i<len;i++) { for(j=i+1;j<len;j++) { if(arr[i] == arr[j]) { break; } if(j == len - 1) { printf("%c",arr[i]); return ; } } } } int main() { char str[] = "abaccdeff"; findSingle(str,strlen(str)); return 0; }
方法二:
void findSingle(char *arr, int len) { int hashtable[26] = {0}; int i; for(i=0;i<len;i++) hashtable[arr[i]-'a']++; for(i=0;i<len;i++) { if(hashtable[arr[i]-'a'] == 1) { printf("%c\n",arr[i]); break; } } if(i >= len) { printf("无满足字符\n"); } }
阅读全文
0 0
- 剑指offer面试题目:第一个只出现一次的字符
- 【剑指Offer面试编程题】题目1283:第一个只出现一次的字符--九度OJ
- [九度OnlineJudge][剑指Offer]题目1283:第一个只出现一次的字符
- 剑指offer名企面试编程题:第一个只出现一次的字符
- 剑指offer-5-面试35:第一个只出现一次的字符
- 【剑指offer】第一个只出现一次的字符
- 剑指offer(35)第一个只出现一次的字符
- 剑指offer--第一个只出现一次的字符
- 剑指offer-35 第一个只出现一次的字符
- 剑指Offer之 - 第一个只出现一次的字符
- 《剑指offer》第一个只出现一次的字符位置
- 剑指offer:第一个只出现一次的字符位置
- 剑指Offer--第一个只出现一次的字符位置
- 【剑指Offer】第一个只出现一次的字符位置
- 【剑指offer】之第一个只出现一次的字符
- 剑指offer:第一个只出现一次的字符位置
- [剑指offer]第一个只出现一次的字符位置
- 《剑指offer》-第一个只出现一次的字符位置
- 误删linux下passwd目录导致进不去系统
- 选择排序
- HDU
- DBA必备脚本--检查失败的作业
- CloudStack相关技术-Zone
- 剑指offer面试题目:第一个只出现一次的字符
- 实现将字符串右循环n位
- 1002. A+B for Polynomials (25)
- SnailApp项目---网络请求封装
- Microsoft Office Plus 2016专业增强版激活
- mybatis从入门到精通
- BZOJ 3670 浅谈KMP算法的拓展应用
- SnailApp---数据流的控制(一)
- POJ 1486 Sorting Slides 二分图关键边 匈牙利算法