1. 题目
给出两个字符串s1 和 s2,判断s2 是否 包含s1的某种排列,如果是,返回True,否则返回False。
输入:s1=‘ab’, s2 = “qwebaei”
输出:True
输入:s1=‘abc’, s2 = “qwebaei”
输出:False
2. 分析
这是一道面试题,要在15min内解决,也并非那么容易。
2.1 贪心思想
我的思想是:某种排列的形态可以用字典存储下来,然后遍历s2的过程就去判断是否能够连续的与s1中的字符匹配上?如果最后待匹配的字符个数为0,那么就返回True;如果遍历到了最后都没匹配完成,那么就返回False。代码如下3.1所示。
2.2 滑动窗口
滑动窗口应该没有上述第一种解法简单。
3. 代码
3.1 代码1
from collections import Counter
def get_res(s1, s2):
c_s1 = Counter(s1)
remaind = len(s1)
for i in range(len(s2)):
if c_s1[s2[i]] > 0:
remaind-=1
c_s1[s2[i]] -= 1
if remaind == 0:
return True
else:
c_s1 = Counter(s1)
remaind = len(s1)
return False
s1 = 'ab'
s2 = "beoasa"
res = get_res(s1, s2)
print(res)