第三种方法为位运算的方法。
位运算符: << 左移 & 与 | 或
#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(" "); }