# -*- coding: utf-8 -*-
'''
Python程序员面试算法宝典---解题总结: 第5章 字符串 5.5 如何判断两个字符串的包含关系
题目:
给定由字母组成的字符串s1和s2,其中,s2中字母的个数少于s1,如何判断s1是否包含
s2? 即出现在s2中的字符在s1中都存在。
例如s1="abcdef", s2="acf",那么s1就包含s2;
如果s1="abcdef", s2="acg",那么s1就不包含s2,因为s2
中有'g',但是s1中没有'g'
分析:
最简单的方法,还是用刚才的哈希数组,
先对字符串1中每个字符进行哈希,
然后对于字符串2中的每个字符判断其在哈希数组中如果不存在,
则不是包含关系
关键:
1 注意需要自己对数组长短进行判断
入参不一定是按照长字符串,短字符串的顺序
参考:
Python程序员面试算法宝典
'''
def isContained(str1, str2):
if not (str1 and str2):
return False
len1 = len(str1)
len2 = len(str2)
if len1 > len2:
bigStr = str1
smallStr = str2
else:
bigStr = str2
smallStr = str1
size = 256
hashArray = [0 for i in range(size)]
for char in bigStr:
index = ord(char) - ord('0')
if index >= size:
return False
hashArray[index] += 1
for char in smallStr:
index = ord(char) - ord('0')
if index >= size:
return False
if 0 == hashArray[index]:
return False
return True
def process():
str1 = 'abcdef'
str2 = 'acf'
result = isContained(str1, str2)
print result
str2 = 'acg'
result = isContained(str1, str2)
print result
str2 = 'abcdef'
str1 = 'acf'
result = isContained(str1, str2)
print result
if __name__ == "__main__":
process()