cheng_you_know

学而时习之!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”。

关于删除字符,后面的字符要往前移,如果每删除一个就移一次,O(n^2)这复杂度有点太高,仅仅用快慢指针就可以搞定,这个方法非常有用,比如求解循环链表。

初始化:快慢指针指向第一个字符

循环:如果快指针指的是不需要的字符,将值赋给慢指针后,快慢指针同时++;如果快指针指向待删除字符,那么直接++;

终止:快指针指向'\0'

bool is_delete_char(char temp)
{
    char delete_c[5] ={'a','e','i','o','u'};
    for(int i =0;i<5;i++)
        if(delete_c[i] == temp)
            return true;
    return false;
}

char * delete_special_char(char *s)
{
    if(s == NULL)
        return NULL;
    cout<<"before:"<<s<<endl;
    int slow_index =0;  //快慢指针
    int fast_index =0;
    for (;s[fast_index]!=0;fast_index++)
    {
        if(!is_delete_char(s[fast_index]))
            s[slow_index++] = s[fast_index];
    }
    s[slow_index] =0;  //end string Don't forget    cout<<"after:"<<s<<endl;
    return s;
}
posted on 2013-07-31 19:52  cheng_you_know  阅读(421)  评论(0编辑  收藏  举报