去除字符串中重复字符

题目

设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。

进一步地,

为你的程序写测试用例。

解答

这道题目其实是要你就地(in place)将字符串中重复字符移除。你可以向面试官问清楚, 不能使用额外的一份数组拷贝是指根本就不允许开一个数组,还是说可以开一个固定大小, 与问题规模(即字符串长度)无关的数组。

如果根本就不允许你再开一个数组,只能用额外的一到两个变量。那么,你可以依次访问 这个数组的每个元素时间复杂度为O(n2 ),代码如下:

#include<iostream>
#include<cstring>
using namespace std;

void removeDuplicate(char *str)
{
    if(str==NULL)
        return;
    int count=0;
    int n=strlen(str);
    for(int i=1;i<n;++i)
    {
        int j=i-1;
        while(j>=0)
        {
            if(str[i]==str[j])
            {
                ++count;
                break;
            }
            else
                --j;
        }
        if(j<0)
            str[i-count]=str[i];
    }
    str[n-count]='\0';
}

int main()
{
    char str[]="";
    removeDuplicate(str);
    cout<<str<<endl;
}

如果可以开一个固定大小,与问题规模(即字符串长度)无关的数组,那么可以用一个数组来 表征每个字符的出现(假设是ASCII字符,则数组大小为256),这样的话只需要遍历一遍字符 串即可,时间复杂度O(n)。代码如下:

void removeDuplicate(char s[])
{
    int len = strlen(s);
    if(len < 2) return;
    bool c[256];
    memset(c, 0, sizeof(c));
    int p = 0;
    for(int i=0; i < len; ++i)
    {
        if(!c[s[i]])
        {
            s[p++] = s[i];
            c[s[i]] = true;
        }
    }
    s[p] = '';
}

 

时间: 2024-10-25 12:59:12

去除字符串中重复字符的相关文章

JS删除字符串中重复字符方法

 这篇文章主要介绍了JS如何删除字符串中重复字符,需要的朋友可以参考下  代码如下: <!DOCTYPE html>  <html>  <head>  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">  </script>  <script>  $(document).ready(function(){  $(&quo

JS使用正则表达式除去字符串中重复字符的方法_javascript技巧

本文实例讲述了JS使用正则表达式除去字符串中重复字符的方法.分享给大家供大家参考,具体如下: 这里演示一个简单的JavaScript正则表达式实例,将一串含有重复字符串中的多余字符滤除掉,请运行查看效果. 具体代码如下: <html> <head> <title>利用正则表达法除去字符串中的重复字符</title> </head> <body> <script language="javascript">

java统计字符串中重复字符出现次数的方法_java

本文实例讲述了java统计字符串中重复字符出现次数的方法.分享给大家供大家参考,具体如下: package com; import org.junit.Test; /** * 统计一个字符串的重复字符出现的次数 * * @author zdw * */ public class StringTest { @Test public void test() { String s = "fdfaacceeeeeeeeeeeegghikkkkkoooo"; count(s); } public

sql删除字符串中重复字符

现在需要对后面电话号码相同的记录进行过滤,删除只剩下一条.  代码如下 复制代码 20051218125830_5988312367.vox 20051218125850_5988312367.vox 20051218135407_5932733345.vox 20051218175857_5923922228.vox 20051218180045_5923922228.vox 过滤后剩下的记录为: 20051218125830_5988312367.vox 20051218135407_593

java删除字符串中重复字符

(?s) 开启单行模式 dotall 让. 号匹配任意字符 (.) 任意字符 并捕获在第一组 (?=.*1) 这是断言, 表示后面内容将是 任意个字符加上第一组所捕获的内容 这样子,如果这整个式子匹配到,表示,第一个捕获组内容在字符串中,至少出现两次,替换为 "" 空串. 进行 全局替换后, 整个字符串所出现的字符将不重复. 下面看与正则实例 string str = "abcdeabcdeabcdeaaaaaadddddceeeeabcccccccacadaeec"

JS删除字符串中重复字符方法_javascript技巧

复制代码 代码如下: <!DOCTYPE html> <html> <head> <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> </script> <script> $(document).ready(function(){ $("button").click(function(){ var s

python去掉字符串中重复字符的方法_python

复制代码 代码如下: If order does not matter, you can use "".join(set(foo))set() will create a set of unique letters in the string, and "".join() will join the letters back to a string in arbitrary order. If order does matter, you can use colle

经典算法面试题目-设计算法移除字符串中重复的字符(1.3)

题目 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 metho

运用javascript如何去除数组中重复的数字或者字符串?

问题描述 运用javascript如何去除数组中重复的数字或者字符串? 运用javascript如何去除数组中重复的数字或者字符串?谢谢了.方法越多越好,谢谢. 解决方案 JavaScript实现数组去除重复整理 javascript 去除数组中重复项的几种方法 解决方案二: 本人只会用JAVA写