您的位置:程序门 -> 专题开发/技术/项目 -> 数据结构与算法



如何去掉重复字符


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


如何去掉重复字符[已结贴,结贴人:wbcs_007]
发表于:2007-07-19 11:23:32 楼主
比如   i   love   you  
结果应为:i   lve   yu
空格不算
发表于:2007-07-19 14:09:191楼 得分:0
2步
1.找到所有重复的字符
2.   删除重复的字符.
发表于:2007-07-20 14:58:242楼 得分:0
如果只是针对字母来说,可以初始化字母表,统计字母个数,大于2的可以将其删除
发表于:2007-07-20 21:16:503楼 得分:0
是不是这个意思

void   test(const   char   *source)
{
    int   table[256]   =   {0};
    const   char   *src   =   source;
    size_t   len   =   strlen(source),   count   =   len;
    while   (count   >   0)
    {
        if   (*src   !=   32)
            table[*src]++;
src++;
        count--;
    }

    src   =   source;
    char   *output   =   new   char[len];
    int   index   =   0;
    while   (len   >   0)
    {
        if   (table[*src]   <=   1)
            output[index++]   =   *src;
        src++;
        len--;
    }
    output[index]   =   0;

    cout   < <   output   < <   endl;
    delete   []output;
}
发表于:2007-07-21 08:42:214楼 得分:0
楼上的算法排序了,人家没有要求排序
发表于:2007-08-03 18:42:585楼 得分:0
void   dstring(char   c,char   *sstr)
{    
      int   i=0,j=0,len=strlen(sstr);
      for   (;   j <len;   j++)
      {
              if   (sstr[j]!=c)
              {  
                      sstr[i]=sstr[j];
                      i++;
              }  
      }
}
发表于:2007-08-03 21:19:406楼 得分:0
我的想法是

先用遍历算法

用一个特殊符号比如 "* ",替换所有重复数据> =2的字母,

最后用   .replace( "* ", " ");
就可以了.

发表于:2007-08-03 22:04:357楼 得分:0
使用两个位图,如果考虑大小写,位图使用long,否则使用int。第0位代表 'a ',第1位代表 'b '.....

位图a,用于记住字母是否已经出现过。
位图b,用于表示字母是否应该出现在最终结果当中。

第一遍循环,检查位图a,看对应的位是否已经为1,如果是,将位图b中对应的位修改为1.   否则将该位置为1。
第二遍循环,从头开始输出字符串,位图b中为1的字符不需要输出。
发表于:2007-08-03 22:06:488楼 得分:0
使用两个位图,如果考虑大小写,位图使用long,否则使用int。第0位代表 'a ',第1位代表 'b '.....

位图a,用于记住字母是否已经出现过。
位图b,用于表示字母是否应该出现在最终结果当中。

第一遍循环,检查位图a,看对应的位是否已经为1,如果是,将位图b中对应的位修改为1.   否则将位图a中该位置为1。
第二遍循环,从头开始输出字符串,位图b中为1的字符不需要输出。

时间复杂度:   o(n)


快速检索

最新资讯
热门点击