题目描述
给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。
异位词 指由相同字母重排列形成的字符串(包括相同的字符串)。
解题代码
写了三个答案,有两个都是超时的,正确的那个还是看的教程。
把正确的代码放出来了
// 滑动窗口解题 func findAnagrams(s string, p string) []int { var res []int sLen := len(s) pLen := len(p) var char = make([]int, 26) for _, i2 := range p { char[i2-'a'] ++ } fIndex := 0 aIndex := -1 for fIndex < sLen { if aIndex+1 < sLen && aIndex-fIndex+1 < pLen { aIndex++ } else { fIndex++ } if aIndex-fIndex+1 == pLen && isEctopic(s[fIndex:aIndex + 1], char) { res = append(res, fIndex) } } return res } // 判断两个字符串是否异位 func isEctopic(s string,char []int) (b bool) { var sChar = make([]int,26) for _, i2 := range s { sChar[i2 - 'a'] ++ } for i, i2 := range char { if sChar[i] != i2 { return false } } return true }
提交结果
运行出来成绩还这么低