String include

题目描述

给定两个分别由字母组成的字符串A和字符串B,字符串B的长度比字符串A短。请问,如何最快地判断字符串B中所有字母是否都在字符串A里?
为了简单起见,我们规定输入的字符串只包含大写英文字母,请实现函数bool StringContains(string &A, string &B)
比如,如果是下面两个字符串:
String 1:ABCD
String 2:BAD
答案是true,即String2里的字母在String1里也都有,或者说String2是String1的真子集。
如果是下面两个字符串:
String 1:ABCD
String 2:BCE
答案是false,因为字符串String2里的E字母不在字符串String1里。
同时,如果string1:ABCD,string 2:AA,同样返回true。

使用hash的思想,如果字符在hash table中,则存在这个字符,否则就返回False

// 时间复杂度O(n + m),空间复杂度O(1)
bool StringContain(string &a,string &b)
{
    int hash = 0;
    for (int i = 0; i < a.length(); ++i)
    {
        hash |= (1 << (a[i] - 'A'));
    }
    for (int i = 0; i < b.length(); ++i)
    {
        if ((hash & (1 << (b[i] - 'A'))) == 0)
        {
            return false;
        }
    }
    return true;
}

使用python中的字典类型

# -*- coding: utf-8 -*-
"""
Created on Mon Jun  5 21:45:05 2017

@author: Sean Chang
"""

def stringinclude(str1,str2):
    dic1 = {}
    for i in str1:
        if (dic1.get(i)==None): #字典中没有这个字符,加入这个字符为key并设置value为1
            dic1[i]=1
        else:
            dic1[i]=dic1[i]+1
    for j in str2:
        if dic1.get(j)==None:
            return False
    return True

def main():
    str1='ABCD'
    str2='BCE'
    print(stringinclude(str1,str2))

main()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容