问题:在一个只有大小写字符串中查找第一个只出现一次的字母
input: aacddcvghhgii
output: v
思路:使用hashtable 来使得时间复杂度为O(n)
参考来自: http://blog.csdn.net/lynnbest/article/details/21818213
input: aacddcvghhgii
output: v
思路:使用hashtable 来使得时间复杂度为O(n)
创建hashtable
第一次接触哈希表。
#include<iostream>
#include<string>
#include<ctype.h>
#define max 100
using namespace std;
int HashFunction(char ch)
{
if(islower(ch))
return ch - 'a';
else if(isupper(ch))
{
return 26 + ch - 'A';
}
}
void MapHashTable(char str[],int n,char HashTable[])
{
int pos;
for(int i=0;i<n;i++)
{
pos=HashFunction(str[i]);
++HashTable[pos];
}
}
char HashSearch(char HashTable[],int n,char str[])
{
int pos;
for(int i=0;i<n;i++)
{
pos=HashFunction(str[i]);
if(1==HashTable[pos])
{
if(pos>=26 && pos <= 51)
return pos - 26 + 'A';
else
return pos + 'a';
}
}
return -1;
}
int main()
{
char str[max];
cout<<"请输入字符串:";
cin>>str;
int n=strlen(str);
char HashTable[52];
memset(HashTable,0,sizeof(HashTable)/sizeof(char));//初始化哈希表
MapHashTable(str,n,HashTable);
char ch=HashSearch(HashTable,n,str);
if(ch!=-1)
cout<<"第一次只出现一次的数为:"<<ch<<endl;
system("pause");
return 0;
}
参考来自: http://blog.csdn.net/lynnbest/article/details/21818213