从面试题中学算法(1)--哈希表查找字符串中第一次仅出现一次的字母
2014-03-22 19:08
316 查看
/*********************************************************************** 问题:在一个只有大小写字符串中查找第一个只出现一次的字母 input: aacddcvghhgii output: v 思路:使用hashtable 来使得时间复杂度为O(n) 创建hashtable **********************************************************************/ #include <stdio.h> #include <string.h> #include <ctype.h> //哈希函数 返回索引地址 int HashFunction(char ch) { if(islower(ch)) return ch-'a'; else if(isupper(ch)) return 26+ch-'A'; } void MapHashTable(char HashTable[],char a[],int len) { int pos; for(int i=0;i<len;i++) { pos=HashFunction(a[i]); //if(HashTable[pos]==0) //表明未被赋值 ++HashTable[pos]; } } char HashSearch(char HashTable[],char a[],int len) { int pos; for(int i=0;i<len;i++) { pos=HashFunction(a[i]); if(1==HashTable[pos]) { if( 26<=pos && pos<=51) return pos-26+'A'; else return pos+'a'; } } return -1; //未找到符合题意 } int main() { char str[]="aacddcBvghhAgii"; int len=strlen(str); printf("源字符串为:%s\n",str); char HashTable[52]; //哈希表 用于存储次数 memset(HashTable,0,sizeof(HashTable)/sizeof(char)); MapHashTable(HashTable,str,len); char ch=HashSearch(HashTable,str,len); if(ch!=-1) printf("第一次只出现一次的字符为:%c\n",ch); }
相关文章推荐
- 字符串查找:(第一次)&&(只出现一次的字符)
- 如何在字符串里查找第一个不重复的字母,即只出现一次的最靠前的字母
- 哈希表初识--查找第一次只出现一次的字符
- Google笔试题:哈希表的一个意想不到的应用--在字符串中查找第一个只出现一次的字符
- [字符串]在一个字符串中查找第一次只出现一次的字符
- 剑指offer——查找一个字符串中第一次出现一次的字符(哈希直接定址法)
- 查找字符串中只出现一次的字符——哈希表
- 从字符串中查找第一次出现一次的字符
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
- 利用哈希表的原理,找到一个字符串中第一次出现的一次的字符
- 算法与数据结构面试题(21)-在一个字符串中找到第一个只出现一次的字符
- 查找字符串中出现一次且第一次出现的字符
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 查找某些字符是否在另一个字符串里出现的高效算法
- 查找字符串中字母出现最多次数的方法小结
- O(n)时间效率寻找字符串中第一次出现一次的字符
- 每天学习一算法系列(17)(在一个字符串中找到第一个只出现一次的字符)
- 【C语言】模拟实现strchr函数.即在一个字符串中查找一个字符第一次出现的位置并返回
- 华为OJ:查找字符的第一个字符串只出现一次
- c++面试题之 找出字符串中第一个只出现一次的字符