Appearance
567. 字符串的排列
原题链接:LeetCode 567. 字符串的排列
题目描述
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1** **的 排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
示例 1:
**输入:**s1 = "ab" s2 = "eidbaooo" **输出:**true **解释:**s2 包含 s1 的排列之一 ("ba").
示例 2:
**输入:**s1= "ab" s2 = "eidboaoo" **输出:**false
提示:
1 <= s1.length, s2.length <= 104
- `s1` 和 `s2` 仅包含小写字母
难度: Medium
题解代码
javascript
/**
* @param {string} s1
* @param {string} s2
* @return {boolean}
*/
var checkInclusion = function(s1, s2) {
let left = 0, right = s1.length - 1
while(right < s2.length) {
if (isValid(s1, s2.substr(left, s1.length))) return true
right++
left++
}
return false
};
function isValid (s1, s2) {
const hash1 = {}, hash2 = {}, len = s1.length
for (let i = 0; i < len; i++) {
hash1[s1[i]] = hash1[s1[i]] ? hash1[s1[i]] + 1 : 1
}
for (let i = 0; i < len; i++) {
hash2[s2[i]] = hash2[s2[i]] ? hash2[s2[i]] + 1 : 1
}
for (let k in hash1) {
if (hash1[k] !== hash2[k]) return false
}
return true
}