思考:
①仅包含小写字母 > 小写字母一共26位 > 如果字符串超过26位则必有重复
②暴力双重循环(省略)
③单循环+STL字符串操作(相当于双循环)
获取首字母,erase删除首字母从剩余的字符串里面find该首字母
代码如下:
class Solution {
public:
bool isUnique(string astr) {
int a = astr.length();
string cmp;
if(a>26)
{
return false;
}
for(int i = 0;i<a-1 ;i++)
{
cmp = astr[0];
astr.erase(0,1);
if(astr.find(cmp)!=string::npos)
{
return false;
}
}
return true;
}
};
④迭代+位运算
class Solution {
public:
bool isUnique(string astr) {
int a = astr.length();
int mark = 0;
int move_bit;
if(a>26)
{
return false;
}
for(const auto & ch : astr)
{
move_bit = ch - 'a';
if((mark & (1<<move_bit)) != 0)
{
return false;
}
else
{
mark |= 1<<move_bit;
}
}
return true;
}
};