实现一个算法,判断一个输入字符串中的每个字符唯一,不能使用额外的数据结构。eg:abbdf返回false
方法1:从头到尾取每个字符,并依次与其后的字符比较,判断是否有重复。时间复杂度N^2。
方法2:字符最多有256种,可以开辟一个256大小的bool数组,用字符对应的ASCII码作为数组下表,来标记字符的出现情况。最理想的线性时间复杂度N。
2.1将bool数组初始化为0;
2.2判断字符串长度是否小于等于256,如果大于256则结束,返回false,说明有重复;
2.3从头到尾扫描字符串,如果当前为0则改为1,如果当前为1则结束,返回false,说明有重复。
C++实现
bool determine_string(const string &ss)
{
bool sign[256] = {0}; //memset(sign,0,sizeof(sign));
int len = ss.length();
if(len>256)
return false;
else
{
for(int i=0;i<len;i++)
{
if(sign[ss[i]]==0)
sign[ss[i]] = 1;
else
return false;
}
return true;
}
}
Python实现
def determine_string(ss):
sign = [0]*256
length = len(ss)
if length>256:
return False
else:
for i in range(0,length):
if sign[ord(ss[i])]==0:
sign[ord(ss[i])] = 1
else:
return False
return True