因为字符的范围是0-255 所以建立一个长度为256的布尔数组,每次遍历都把相应位置设置为true,如果在某次遍历时候,相应位置已经是true,则证明该字母已经出现过了,就返回false。
另外还可以STL的map来做,也可以用计数排序来做,建立辅助数组,每次相应位置自增1,最后遍历该辅助数组,如果出现大于1的元素,则返回false
第一种解法如下
#include <iostream>
#include <string>
using namespace std;
bool AppearOnce(string str)
{
int i=0;
bool b[256];
for(i=0;i<str.length();i++)
{
if(b[str[i]]==true)
{
return false;
}
b[str[i]]=true;
}
return true;
}
int main()
{
string test="abca";
bool ret=AppearOnce(test);
return 0;
}