#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;}
版权声明:本文为博主原创文章,未经博主允许不得转载。
你可以用爱得到全世界,你也可以用恨失去全世界