Cracking the coding interview--Q1.1
2013-07-30 21:20
260 查看
作者:ustcweijie
参考:http://hawstein.com/posts/1.1.html
理解:设计一个算法判断字符串中字符是否有重复。要求不能使用附加数据结构(理解为只用基本的数据类型)
c[i], 长度为256, c[i]表示ASCII码等于i的字符出现的次数。扫描待判断的字符串并统计字符出现的次数,当某个字符计数 > 1 即表示有重复字符出现。
C/C++代码实现:
数组(32字节=256bits)的256位实现相同的目的,请参考:http://hawstein.com/posts/1.1.html
变量会是负数,因此要做一下特殊处理: int v = s[j] +256;
参考:http://hawstein.com/posts/1.1.html
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. 时间复杂度:
根据代码发现该算法的时间复杂度为O(n). 空间复杂度为计数器数组的长度256字节. 为了节省空间作者hawstein 利用长度为8的int数组(32字节=256bits)的256位实现相同的目的,请参考:http://hawstein.com/posts/1.1.html
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;
相关文章推荐
- Cracking the coding interview--Q1.1
- Cracking The Coding Interview--Q1.1
- Cracking the coding interview--Q1.1
- Cracking the coding interview--Q1.1
- Cracking the coding interview--Q1.1
- Cracking the coding interview--Q1.1
- Cracking the coding interview--Q1.1
- Cracking The Coding Interview 5.6
- Cracking the coding interview--Q4.5
- Cracking the coding interview--Q4.7
- 【Cracking the coding interview】Q1.1(字符唯一)
- Cracking the coding interview Q1.1
- 《Cracking the Coding Interview》——第8章:面向对象设计——题目3
- Cracking the coding interview--Q20.5
- 《Cracking the Coding Interview》——第13章:C和C++——题目5
- Cracking the coding interview--Q5.3
- Cracking the coding interview
- Cracking The Coding Interview 9.6
- 《Cracking the Coding Interview》——第17章:普通题——题目4
- 《Cracking the Coding Interview》——第18章:难题——题目1