字符串删除指定字符

一、算法描述

    给定一个字符串和模式字符串,要求将出现在模式字符串的字符在原字符串中删除。

 

二、算法思路

    从题面理解,常规思路是遍历原字符串和模式字符串,将原字符串的每个字符和模式串的每个字符比较,如果比较相等,则不输出,其时间复杂度为O(m*n),m和n各自为字符串和模式字符串的长度;另一种高效的思路是以空间换时间,借助hash数组,标记模式字符串中每个出现的字符,hash数组以字符的ascii码值为下标,所以其大小一般为256,然后遍历原字符串,判断字符是否在hash数组中,不在的话则输出。

 

三、算法代码

    下面给出这种方法的代码

#include <iostream>
#include <cstring>
using namespace std;
//o(m*n),m=>string length, n==>pat length
void del_pat_char(char *s,int n,const char *pat)
{
    int i=0,j=0;
    int lp=strlen(pat);    
    for(i=0;i<n;++i)
    {
        for(j=0;j<lp && pat[j]!=s[i];++j)
            ;
        if(j>=lp)
        {
            cout<<s[i];
        }
    }
    cout<<endl;
    
}
//o(n)
void del_pat_char_2(char *s,int n, const char *pat)
{
    int i=0,j=0;    
    int *pHash=new int[256];
    memset(pHash,0,sizeof(int)*256);
    while(*pat)
    {
        pHash[*pat]=1;
        pat++;
    }
    for(i=0;i<n;++i)
    {
        if(!pHash[s[i]])
            cout<<s[i];
    }
    cout<<endl;
    
}
int main()
{
    char str[256]="You are the best people";const char pat[256]="plbte";
    del_pat_char(str,strlen(str),pat);
    del_pat_char_2(str,strlen(str),pat);
    return 0;
}
posted @ 2015-11-07 23:19 ballwql 阅读(...) 评论(...) 编辑 收藏