cci-Q1.3 字符数组去重
2013-07-09 11:12
344 查看
原文:
Design an algorithm and write code to remove the duplicate characters in a string without using any additional buffer. NOTE: One or two additional variables are fine. An extra copy of the array is not.
FOLLOW UP
Write the test cases for this method.
译文:
设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
进一步地,
为你的程序写测试用例。
1,不使用额外的空间,时间复杂度O(n^2),扫描字符数组,将此字符后面与它相同的字符都替换成一个特殊的字符(假设字符串中不含这个替代符)
public static char[] removeDuplicates(char[] strTmp) {
char[] str = strTmp;
if (str == null) {
return null;
}
int len = str.length;
if (len < 2) {
return str;
}
for (int i = 0; i < len; i++) {
if (str[i] != '*') {
for (int j = i + 1; j < len; j++) {
if (str[j] == str[i]) {
str[j] = '*';
}
}
}
}
return str;
}
junit testcase
@Test
public void testRemoveDuplicates() {
System.out.println("removeDuplicates");
assertArrayEquals("abcd".toCharArray(), q1_3.removeDuplicates("abcd".toCharArray()));
assertArrayEquals(null, q1_3.removeDuplicates(null));
assertArrayEquals("a****".toCharArray(), q1_3.removeDuplicates("aaaaa".toCharArray()));
assertArrayEquals("a**b**".toCharArray(), q1_3.removeDuplicates("aaabbb".toCharArray()));
assertArrayEquals("abcdefg*".toCharArray(), q1_3.removeDuplicates("abcdefga".toCharArray()));
assertArrayEquals("abcdefg*".toCharArray(), q1_3.removeDuplicates("abcdefgb".toCharArray()));
}
2,可以使用额外的空间,时间复杂度可以降低,使用Q1.1判断字符中是否存在重复元素的方法,如果是重复则替换成特殊字符。http://blog.csdn.net/hillchan31/article/details/9273369
Design an algorithm and write code to remove the duplicate characters in a string without using any additional buffer. NOTE: One or two additional variables are fine. An extra copy of the array is not.
FOLLOW UP
Write the test cases for this method.
译文:
设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
进一步地,
为你的程序写测试用例。
1,不使用额外的空间,时间复杂度O(n^2),扫描字符数组,将此字符后面与它相同的字符都替换成一个特殊的字符(假设字符串中不含这个替代符)
public static char[] removeDuplicates(char[] strTmp) {
char[] str = strTmp;
if (str == null) {
return null;
}
int len = str.length;
if (len < 2) {
return str;
}
for (int i = 0; i < len; i++) {
if (str[i] != '*') {
for (int j = i + 1; j < len; j++) {
if (str[j] == str[i]) {
str[j] = '*';
}
}
}
}
return str;
}
junit testcase
@Test
public void testRemoveDuplicates() {
System.out.println("removeDuplicates");
assertArrayEquals("abcd".toCharArray(), q1_3.removeDuplicates("abcd".toCharArray()));
assertArrayEquals(null, q1_3.removeDuplicates(null));
assertArrayEquals("a****".toCharArray(), q1_3.removeDuplicates("aaaaa".toCharArray()));
assertArrayEquals("a**b**".toCharArray(), q1_3.removeDuplicates("aaabbb".toCharArray()));
assertArrayEquals("abcdefg*".toCharArray(), q1_3.removeDuplicates("abcdefga".toCharArray()));
assertArrayEquals("abcdefg*".toCharArray(), q1_3.removeDuplicates("abcdefgb".toCharArray()));
}
2,可以使用额外的空间,时间复杂度可以降低,使用Q1.1判断字符中是否存在重复元素的方法,如果是重复则替换成特殊字符。http://blog.csdn.net/hillchan31/article/details/9273369
相关文章推荐
- 字符数组初始化
- 输出字符数组与其他数组的区别
- 字符数组定义
- c程序设计语言阅读笔记(二)字符指针和字符数组
- C语言字符数组的应用
- 字符数组,字符指针,sizeof,strlen总结
- 字符数组和字符串
- JAVA实现字符串反转,借助字符数组实现
- 字符串指针和字符数组的区别
- (27)'c++:COMPLETE REFERENCE' 第一部分 第四章(数组和以空字符结束的字符串) 第二节
- 字符串指针与字符数组的区别
- php中数组首字符过滤功能代码
- 字符数组
- js实现过滤重复字符和重复数组-javascript技巧
- JNI中 Java 中字符串 转换成C中的字符数组方法
- C语言字符数组的初始化
- [转]字符串和字符数组之间的转换
- C中的字符指针和字符数组的使用
- java 字符串,字符数组,list间的转化
- c笔记09---字符数组及字符串,预处理,宏,条件编译