您的位置:首页 > 其它

Cracking-- 1.1 判断字符串中是否有重复字符

2014-08-19 11:26 183 查看
第三种方法为位运算的方法。

位运算符: << 左移 & 与 | 或

#include <iostream>
#include <string>
#include <unordered_set>
#include <vector>
#include <unordered_map>
using namespace std;

//时间 O(n) 空间 O(1)
bool hasSame(string str)
{
if(str.size() == 0 )
return false;
bool ans = false;
vector<bool> flag(300,false);
for(int i = 0; i < str.size(); i++)
{
if(flag[str[i]] == true)
return true;
flag[str[i]] = true;
}
return false;
}
//时间 O(n*n) 空间 O(1)
bool hasSame2(string str)
{
if(str.size() == 0)
return false;
for(int i = 0; i < str.size(); i++)
for(int j = i+1; j < str.size(); j++)
{
if(str[i] == str[j])
return true;
}
return false;
}
//时间 O(n) 空间 O(1)
bool hasSame3(string str)
{
if(str.size() == 0 )
return false;
if(str.size() > 26)
return true;

int flag = 0;
for(int i = 0; i < str.size(); i++)
{
int num = 1 <<(str[i] - 'a');
if(flag & num)
return true;
flag = flag | num;
}
return false;
}
int main()
{
cout<< hasSame3("abc");
cout<< hasSame3("aa");
cout<< hasSame3("abac");
cout<< hasSame3("bcb");
cout<< hasSame3("");
cout<< hasSame3(" ");
cout<< hasSame3("  ");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: