您的位置:首页 > 其它

数组与字符串,判断字符串各个字符是否不同

2015-08-15 21:28 302 查看


#include<string>

using namespace std;

bool isUniqueChars2(string str)

{

if (str.length() > 256) return false;

bool *char_set = new bool[256];

memset(char_set, 0, sizeof(bool) * 256);

for (int i = 0; i < str.length(); i++)

{

int val = str[i];

if (char_set[val])//这个字符已经在字符串中出现过

{

return false;

}

char_set[val] = true;

}

return true;

}

这段代码的时间复杂度为O(n),其中n为字符串长度,空间复杂度为O(1).


使用位向量,可以将空间占用减少为原先的1/8.下面的代码假设字符串只含有小写字母a到z.这样一来,我们只需使用一个int型变量。

#include<string>

using namespace std;

bool isUniqueChars(string str)

{

if (str.length > 26) return false;

int checker = 0;

for (int i = 0; i < str.length(); i++)

{

int val = str[i] - 'a';

if ((checker& (1 << val)) > 0)

{

return false;

}

checker |= (1 << val);

}

return true;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: