567. 字符串的排列
字符串的排列
题目描述:
给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
示例 1:
输入: s1 = “ab” s2 = “eidbaooo”
输出: True
解释: s2 包含 s1 的排列之一 (“ba”).
示例 2:
输入: s1= “ab” s2 = “eidboaoo”
输出: False
思路:
判断相不相等就是判断26个字母的个数相不相等,用滑动窗口法,第一次传入len(s1)开始判断,移动一次第一个字母的数量减去,加上最后一个字母的数量
代码:
func checkInclusion(s1 string, s2 string) bool {
if len(s1) > len(s2) {
return false
}
mp := make(map[byte]int,26)
mp2 := make(map[byte]int,26)
for i:=0;i<len(s1);i++{
mp[s1[i]]++
mp2[s2[i]]++
}
if check(mp,mp2)==true{
return true
}
for i:=len(s1);i<len(s2);i++{
mp2[s2[i-len(s1)]]--
mp2[s2[i]]++
if check(mp,mp2)==true{
return true
}
}
return false
}
func check(mp1 map[byte]int,mp2 map[byte]int) bool {
var i byte
for i='a';i<'z';i++{
if mp1[i]!=mp2[i]{
return false
}
}
return true
}
代码效率:
执行用时:12 ms, 在所有 Go 提交中击败了43.98%的用户
内存消耗:2.6 MB, 在所有 Go 提交中击败了23.90%的用户
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!