/*
-------找到字符串中第一个不重复的字符------
提供两种方法:第一种建立一个对应的map;
第二种也是仿照map建立两个数组,分别存储字符的数目和索引,找到数目为1,且索引最小的那个
时间:2013.10.16
author:stefen
*/
#include <iostream>
#include <map>
using namespace std;
void FindFirstLetter(const char * str,int lens)
{
map<char,int> m;
int i ;
for(i = 0;i<lens;i++)
++m[str[i]];
for(i = 0;i<lens;i++)
if(m[str[i]] ==1)
break;
cout<<(i<lens?str[i]:'0')<<endl;
}
void FindFirstLetter1(const char *str,int lens)
{
int num[26]={0};
int index[26]={0};
int i;
for(i=0;i<lens;i++)
{
++num[str[i]-'a'];
index[str[i]-'a'] = i;//记录该字符最后一次出现的位置
}
int min = lens;
//如果该字符的数目为1,且index最小,则输出该字符
for(i = 0;i<lens;i++)
if(num[str[i]-'a'] == 1 && index[str[i]-'a']<min)
min = index[str[i]-'a'];
cout<<str[min]<<endl;
}
int main()
{
char *str = "abbeddaesfghhf";
int lens = strlen(str);
FindFirstLetter(str,lens);
FindFirstLetter1(str,lens);
return 0;
}
字符串的第一个不重复字符
最新推荐文章于 2023-10-29 23:13:25 发布