每日打卡

2021-11-30 014 015 字符串中的所有变位词

2021-11-30  本文已影响0人  16孙一凡通工

常见字符串题目解题思路:

  1. 统计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;
}
上一篇 下一篇

猜你喜欢

热点阅读