zoukankan      html  css  js  c++  java
  • 字符串包含判断

      本节总结编程的艺术(CSDN)字符串包含操作。

      算法描述:假设有两个由字母组合的字符串A和字符串B,字符串A的长度要大于字符串B的长度。算法如何判断出现在字符串B中的字母也出现在字符串A呢?

      算法举例:StringA = "ABCDEFG", 若StringB = "DCEFG",则StringA与StringB之间算法判断是true;若StringB = "DCEFM"。 而StringA与StringC之间算法判读是false。

      我们首先可以想到的办法是:遍历StringB,对于B中每一个字母,遍历字符串A,判断当前字母是出现在字符A中。算法的时间复杂度O(n*m),空间复杂度O(1)。

    #include "stdafx.h"
    using namespace std;
    
    bool compare_string(string a, string b)
    {
        bool is_match = false;
        for (int i = 0; i != b.length(); i++)
        {
            int j = 0;
            for (; j != a.length(); j++)
            {
                if (b[i] == a[j])
                    break;
            }
            if (j == a.length())
                return is_match;
        }
        is_match = true;
        return is_match;
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        string a = "abcedfg";
        string b = "ceab";
        bool is_match = compare_string(a,b);
        if (is_match)
            cout<<"Match!";
        else
            cout<<"Not Match!";
        system("pause");
        return 0;
    }

      

      我们进一步观察语料不难发现,字符串仅出现字母,因此字符串的“规模”就被限定了(字符串中只能出现26个大写字母与小写字母),因此我们可以使用哈希表方法,先将字符串A映射到哈希表中,然后对于字符B中的每个字符,直接查表判断是否存在。算法的时间复杂度O(n),空间复杂度O(K),k等于26*2。

    #include "stdafx.h"
    using namespace std;
    bool compare_string(string a, string b)
    {
        bool is_match = true;
        const int table_size = 26;
        int hash_table[table_size*2] = {0};
        //将字符串a映射到哈希表中
        for (int i=0; i!=a.length(); i++)
        {
            int index = a[i]>'z' ? a[i]-'A'+table_size : a[i]-'a';
            hash_table[index] = 1;
        }
        //对于字符串b中的每个字符串,查找哈希表判断是否在a中是否存在
        for (int i=0; i!=b.length();i++)
        {
            int index = b[i]>'z' ? b[i]-'A'+table_size : b[i]-'a';
            if (!hash_table[index])
            {
                is_match = false;
                break;
            }
        }
        return is_match;
    
    }
    
    int _tmain(int argc, _TCHAR* argv[])
    {
        string a = "Abcedfg";
        string b = "cebA";
        bool is_match = compare_string(a,b);
        if (is_match)
            cout<<"Match!";
        else
            cout<<"Not Match!";
        system("pause");
        return 0;
    }

      

  • 相关阅读:
    【机器学习】作业7: 随机森林
    【机器学习】作业6-EM算法
    【分布式系统】Consistent Hashing
    北京G,计算几何,线段相交
    带权区间调度问题,软件的期中复习
    机器学习期中考复习(md全是证明题)
    hihocoder35 模板场
    缺课两周后的数值计算笔记
    跨域访问设置
    截取视频第一帧图片
  • 原文地址:https://www.cnblogs.com/wangbogong/p/3101429.html
Copyright © 2011-2022 走看看