作者:
ustcweijie
1. 题目
原文:Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures?
理解:设计一个算法判断字符串中字符是否有重复。要求不能使用附加数据结构(理解为只用基本的数据类型)
2. 思路
由于字符串组成的基本单位是字符,为了不失一般性,此处考虑的作用域为整个ASCII 字符集,建立一个计算器数组 c[i], 长度为256, c[i]表示ASCII码等于i的字符出现的次数。扫描待判断的字符串并统计字符出现的次数,当某个字符计数 > 1 即表示有重复字符出现。
3. 代码
C/C++代码实现:
bool IsUnique(string s)
{
int c[256];
for(int i = 0; i < 256; i++)
c[i] = 0;
for(int j = 0; j < s.length(); j++)
{
c[s[j]] += 1;
if(c[s[j]] > 1)
return false;
}
return true;
}
4. 分析
4.1. 时间复杂度:
4.2. 关于ASCII码
ASCII 码字符集用一个字节长度的整数表示 256个不同的字符,根据编译器的不同,char 分为signed char 和unsigned char两种情况,在上述代码中,s[j] 表示字符串中位于j位置上的字符对应的ASCII 编码。 当编译器把char 解释成在signed char 时候,ASCII码-> int 转换时要特别小心,对于0~127之间的字符,可以直接赋值 int v = s[j],但是对于128 ~255 之间的字符直接复制给int 变量会是负数,因此要做一下特殊处理: int v = s[j] +256;