cci-Q1.3 字符数组去重

来源:互联网 发布:pkpm施工软件下载 编辑:程序博客网 时间:2024/05/20 09:27

原文:

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


原创粉丝点击