#include <iostream>
#include <hash_map>
using namespace std;
using namespace __gnu_cxx;
//----solution1------------//
// 双重循环遍历字符串 --do not
//------solution2---------//
//use hashtable ----a little stupid
// o(n) but space。。
bool isUniqStr2(string str){
hash_map<char, bool> charHash;
for(int i= 0;i < str.length();i++){
if(charHash[str[i]]==1){
std::cout << "its not a uniq str" <<std::endl;
return false ;
}
charHash[str[i]]=1;
}
std::cout << "it's a uniq str" <<std::endl;
return true;
}
//--------solution3========//
// bit 运算 ---clever ------范围 checker 是int型,4个字节,最多只能表示4*8个字符
bool isUniqStr3 (string str){
int checker = 0;
for(int i=0;i<str.length();i++){
int val = str[i]-'a';
int j= (1 << val);
std::cout << "val="<<val << "\t1<< val=" <<j<<std::endl;
if((checker & (1 << val))>0) return false;
checker |=(1<<val);
std::cout << "checker: " << checker <<std::endl;
}
return true;
#include <hash_map>
using namespace std;
using namespace __gnu_cxx;
//----solution1------------//
// 双重循环遍历字符串 --do not
//------solution2---------//
//use hashtable ----a little stupid
// o(n) but space。。
bool isUniqStr2(string str){
hash_map<char, bool> charHash;
for(int i= 0;i < str.length();i++){
if(charHash[str[i]]==1){
std::cout << "its not a uniq str" <<std::endl;
return false ;
}
charHash[str[i]]=1;
}
std::cout << "it's a uniq str" <<std::endl;
return true;
}
//--------solution3========//
// bit 运算 ---clever ------范围 checker 是int型,4个字节,最多只能表示4*8个字符
bool isUniqStr3 (string str){
int checker = 0;
for(int i=0;i<str.length();i++){
int val = str[i]-'a';
int j= (1 << val);
std::cout << "val="<<val << "\t1<< val=" <<j<<std::endl;
if((checker & (1 << val))>0) return false;
checker |=(1<<val);
std::cout << "checker: " << checker <<std::endl;
}
return true;
}
int main(){
string str = "abcdefg";
bool a = isUniqStr3(str);
str ="aabbccddff" ;
a = isUniqStr3(str);
str ="abdfdf";
a = isUniqStr3(str);
}