每日一题---438. 找到字符串中所有字母异位词[力扣][Go]

简介: 每日一题---438. 找到字符串中所有字母异位词[力扣][Go]

题目描述

给定两个字符串 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
}

提交结果

运行出来成绩还这么低


相关文章
|
2月前
|
存储 Go 索引
go语言中遍历字符串
go语言中遍历字符串
57 5
|
5月前
|
存储 算法
LeetCode第49题字母异位词分组
LeetCode第49题"字母异位词分组"的解题方法,通过将每个字符串的字符排序后作为键存储在HashMap中,有效地将所有字母异位词分组。
LeetCode第49题字母异位词分组
|
1月前
|
Go
go语言for 遍历字符串
go语言for 遍历字符串
31 8
|
2月前
|
Go 索引
go语言遍历字符串
go语言遍历字符串
35 3
|
3月前
|
存储
Leetcode第49题(字母异位词分组)
LeetCode第49题要求将字符串数组中的字母异位词分组,可以通过将每个字符串排序后作为键存入哈希表,最后将哈希表中的值添加到结果列表中来实现。
22 1
|
3月前
|
算法
Leetcode第十七题(电话号码的字母组合)
这篇文章介绍了如何使用深度优先搜索(DFS)算法来解决LeetCode第17题——电话号码的字母组合问题,通过递归方法生成所有可能的字母组合。
27 0
Leetcode第十七题(电话号码的字母组合)
|
3月前
|
索引
【LeetCode 11】242.有效的字母异位词
【LeetCode 11】242.有效的字母异位词
19 0
【LeetCode 11】242.有效的字母异位词
|
4月前
|
Go
Go字节数组与字符串相互转换
Go字节数组与字符串相互转换
46 3
|
3月前
|
算法
【LeetCode 52】17.电话号码的字母组合
【LeetCode 52】17.电话号码的字母组合
43 0
|
4月前
|
存储 Go
go语言字符串变小写
go语言字符串变小写