「这是我参与11月更文挑战的17天,活动详情查看:2021最后一次更文挑战」
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
1 | ini复制代码示例 1: |
来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/MP…
思路
- 首先异位词的题目,一般都可以空间换时间去解决
- 所以我们可以使用哈希表去解决
- 但是题目中说到是小写字母,所以我们用固定大小的
26
位数组去标记计数
- 我们用
ab
和cba
来举例- 当出现
ab
和abc
这样的样例我们是最好解决的 - 只要对应位置在数组中加一后再减一,就可以得出
ab
是abc
的子序列 - 所以我们代码中第一次的判断就是做一个这样的情况
- 面对
ab
和cba
的情形,我们使用双指针去解决 - 最开始是下面的情形
- 当出现
- 然后对应字符串
2
的情况是下图所示
- 将
s1
的字符串为滑动窗口的长度,每次进行扫描
1 | java复制代码class Solution { |
下一篇我们会去介绍,这道题的变种题,这篇主要使用双指针+标记法📌
本文转载自: 掘金