首页 > 代码库 > 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(" ");}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。