Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?
实现一个算法来判断一个字符串的字符是否唯一(即没有重复).不能使用额外的数据结构.(即只使用基本的数据结构)
方法1(O(n^2)):
#include <iostream>
#include <cstring>
using namespace std;
bool isUnique(string s)
{
int len = s.length();
for(int i=0; i<len; ++i)
{
for(int j=i+1; j<len; ++j)
{
if(s[i]==s[j])
return false;
}
}
return true;
}
方法2(O(n)):
bool isUnique2(string s)
{
bool a[256];
memset(a,0,sizeof(a));
int len=s.length();
for(int i=0; i<len; ++i)
{
int v=(int)s[i];
if(a[v]) return false;
a[v]=true;
}
return true;
}
方法3(O(n)):
bool isUnique1(string s)
{
int a[8];
memset(a,0,sizeof(a));
int len=s.length();
for(int i=0; i<len; ++i)
{
int v = (int)s[i];
int idx = v/32, shift = v%32;
if(a[idx] & (1<<shift)) return false;
a[idx] |= (1<<shift);
}
return true;
}