常见字符串题目解题思路:
- 统计0-26的个数,在此基础上进行解题
2.哈希表统计
3.针对括号匹配、路径拆分等字符串题目采用栈或者队列
这题符合第一种,同时采用了双指针,有点类似于滑动窗口。
014,015思路一致
Go版本:
import "fmt"
func checkInclusion(s1 string, s2 string) bool {
// 有点类似于前缀和,但又不是前缀和
// 双指针思路
if len(s1)>len(s2){
return false;
}
// arr1:=make([]int,26);
// arr2:=make([]int,26);
var arr1,arr2 [26]int
for i:=0;i<len(s1);i++{
arr1[int(s1[i]-'a')]++;
arr2[int(s2[i]-'a')]++;
}
if arr1==arr2{
return true;
}
for i:=len(s1);i<len(s2);i++{
arr2[int(s2[i-len(s1)]-'a')]--;
arr2[int(s2[i]-'a')]++;
if arr1==arr2{
return true;
}
}
// fmt.Println("那个地方");
// fmt.Println(arr1);
// fmt.Println(arr2);
return false;
}
Go版本:
func findAnagrams(s string, p string) []int {
var arr1,arr2 [26]int;
var res []int;
if len(s)<len(p){
return res;
}
for i:=0;i<len(p);i++{
arr1[int(p[i]-'a')]++;
arr2[int(s[i]-'a')]++;
}
if arr1==arr2{
res=append(res,0);
}
for i:=len(p);i<len(s);i++{
arr2[int(s[i-len(p)]-'a')]--;
arr2[int(s[i]-'a')]++;
if arr1==arr2{
res=append(res,i-len(p)+1);
}
}
return res;
}
网友评论