1.3 删除重复字符串

注意此题不是指删除连续的重复字符,而是所有重复的字符。两种思路:

1、不用额外的空间。直接在当前字符串上更改,采用类似直接插入排序的方法,将字符串前一部分设为新的字符串,依次判断后续的每一个字符是否在新的字符串中,没有出现则将其添加到新的字符串末尾,否则说明重复,判断下一个字符。最后,将新的字符串末尾置为结束符'\0';(如果是c++的std::string,应该用resize,因为string不通过结束符判断字符串,而是通过内置一个长度判断。)

2、使用额外的空间,则可以考虑使用一个set记录已经出现过的字符,或者这里可以使用数组bool hit[256],这是因为字符最多就256个,初始化为0.每个字符c判断hit[c]是否为0,是则说明未重复,置为1,并加入新的字符串,否则重复,判断下一个。

void removeDuplicates(char *str){
        int len = strlen(str);
        if (len < 2) return;
        int tail = 1;
        for (int i = 1; i < len; ++i) {
            int j;
            for (j = 0; j < tail; ++j) {
                if (str[i] == str[j]) break;
                }
            if (j == tail) {
                str[tail] = str[i];
                ++tail;
                }
            }
        str[tail] = '\0';
}

 

 

posted on 2013-01-07 13:31  小龙人2012  阅读(180)  评论(0编辑  收藏  举报

导航