1.3 设计一个算法移除字符串中的重复字符,算法不使用额外缓冲。并对你的算法设计测试用例。
2013-05-29 14:53
381 查看
1.3 设计一个算法移除字符串中的重复字符,算法不使用额外缓冲。并对你的算法设计测试用例。注意:一两个变量使用当是OK的,但是复制整个数组就不行了。
解答(1):
无字符串缓冲算法
1. 对每个字符判断是否为重复字符。
2. 重复字符直接跳过,非重复字符记录。
时间复杂度为O(n^2)
测试用例:
1. 无重复字符:abcd;
2. 全重复字符:aaaa;
3. 无效字符串:null;
4. 连续重复字符串:aaaabbbb;
5. 非连续重复字符串:abcabc;
字符串缓冲算法:
1. 无重复字符:abcd;
2. 全重复字符:aaaa;
3. 无效字符串:null;
4. 空字符串:empty
5.连续重复字符串:aaaabbbb;
6. 非连续重复字符串:abcabc;
解答(1):
无字符串缓冲算法
1. 对每个字符判断是否为重复字符。
2. 重复字符直接跳过,非重复字符记录。
时间复杂度为O(n^2)
void RemoveDuplicates(char *str,int len) { if (NULL==str) return; if (len<2) return; int i,j; int tail=1; for (i=1;i<len;i++) { for (j=0;j<tail;j++) { if (str[i]==str[j]) { break; } } if (j==tail) { str[tail]=str[i]; tail++; } } str[tail]='\0';//或者str[tail]=0 }
测试用例:
1. 无重复字符:abcd;
2. 全重复字符:aaaa;
3. 无效字符串:null;
4. 连续重复字符串:aaaabbbb;
5. 非连续重复字符串:abcabc;
字符串缓冲算法:
void RemoveDuplicates(char *str,int len) { if (NULL==str) return; if (len<2) return; int i; bool hit[256]; for (i=0;i<256;i++) { hit[i]=false; } int tail=1; hit[str[0]]=true; for (i=1;i<len;i++) { if (!hit[str[i]]) { str[tail]=str[i]; tail++; hit[str[i]]=true; } } str[tail]='\0';//或者str[tail]=0 }
1. 无重复字符:abcd;
2. 全重复字符:aaaa;
3. 无效字符串:null;
4. 空字符串:empty
5.连续重复字符串:aaaabbbb;
6. 非连续重复字符串:abcabc;
相关文章推荐
- 设计一个算法移除字符串中的重复字符,并写出测试用例。
- 设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
- 经典算法面试题目-设计算法移除字符串中重复的字符(1.3)
- 经典算法面试题目-设计算法移除字符串中重复的字符(1.3)
- 1.1 设计算法判断一个字符串中字符都是否唯一的。如果不能使用额外的数据结构呢?
- 去除字符串中的重复字符,算法不使用额外缓冲。如abbc->abc
- 实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构
- 算法:编写算法移除一个字符串中重复的字符
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符。 给定一个字符串(不一定全为字母)A及它的长度n。请返回第一个重复出现的字符。保证字符串中有重复字符,字符串的长度小于等于500。
- 设单链表中存放n个字符,试设计一个算法,使用栈判断该字符串是否中心对称
- 设单链表中存放n个字符,试设计一个算法,使用栈推断该字符串是否中心对称
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。 给定一个string iniString,请返回一个bool值,True代表所有字符全都不同,False代
- 对于一个字符串,请设计一个高效算法,找到第一次重复出现的字符
- 请实现一个算法,确定一个字符串的所有字符是否全都不同。这里我们要求不允许使用额外的存储结构。
- 【面试经典题之字符串】实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构
- CI1.1 实现一个算法,确定一个字符串的所有字符是否全部不同。假使不允许使用额外的数据结构。
- 原串翻转 请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。 给定一个string iniString,请返回一个string,为翻转后的字符串
- 腾讯2017年实习生编程题目(第二题)----2.算法基础-字符移位 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间。
- 位运算(篇1)不使用任何其他的数据结构检查一个字符串中是否有重复字符