首页 > 代码库 > Cracking-- 1.1 判断字符串中是否有重复字符

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

第三种方法为位运算的方法。

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

#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("  ");}