如果我们假设字符集是ASCII字符,那么我们可以开一个大小为256的bool数组来表征每个字符的出现。数组初始化为false,遍历一遍字符串中的字符,当bool数组对应位置的值为真, 表明该字符在之前已经出现过,即可得出该字符串中有重复字符。否则将该位置的bool数组 值置为true。
核心代码:
1 bool isCharUnique(string s) 2 { 3 bool a[256]; 4 int i =0; 5 memset(a,0,sizeof(a)); 6 int len = s.length(); 7 for(i = 0;i < len;++i) 8 { 9 int v = (int)s[i]; 10 if(a[v]) return false; 11 a[v] = true; 12 } 13 return true; 14 }
示例代码:
1 #include <iostream> 2 #include <cstring> 3 using namespace std; 4 bool isCharUnique(string s) 5 { 6 bool a[256]; 7 int i =0; 8 memset(a,0,sizeof(a)); 9 int len = s.length(); 10 for(i = 0;i < len;++i) 11 { 12 int v = (int)s[i]; 13 if(a[v]) return false; 14 a[v] = true; 15 } 16 return true; 17 } 18 int main() 19 { 20 string s1 = "i am superdemon."; 21 string s2 = "abcdefghijklmnopqrstuvwxyzABCD1234567890"; 22 cout << isCharUnique(s1) << " " << isCharUnique(s2) << endl; 23 return 0; 24 }
原文:http://www.cnblogs.com/sxmcACM/p/4776966.html