zoukankan      html  css  js  c++  java
  • 字符串删除指定字符

    一、算法描述

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

    二、算法思路

        从题面理解,常规思路是遍历原字符串和模式字符串,将原字符串的每个字符和模式串的每个字符比较,如果比较相等,则不输出,其时间复杂度为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;
    }
  • 相关阅读:
    (最小路径覆盖) poj 1422
    (匈牙利算法) hdu 2119
    (匈牙利算法) hdu 4185
    (匈牙利算法) hdu 2063
    (匈牙利算法)hdu 1281
    (匈牙利算法DFS)hdu 3729
    (01 染色判奇环) hdu 3478
    (多重背包)poj 1276
    (判断欧拉回路)poj 1368
    (差分约束) hdu 1384
  • 原文地址:https://www.cnblogs.com/ballwql/p/4946339.html
Copyright © 2011-2022 走看看