leetcode438 找到字串中所有字母異位詞

2021-10-03 08:42:15 字數 1565 閱讀 8355

其實我的演算法並不是強項,然後今天在做438這道題的時候發現了乙個讓我無比佩服的思路,這裡記錄一下和大家分享:

首先看一下題目:

給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。

字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。

說明:字母異位詞指字母相同,但排列不同的字串。

不考慮答案輸出的順序。

首先說說我的思路(時間沒過,沒興趣的可以跳過,直接看大神解法)

**:

public list

findanagrams1

(string s, string p)

else

} bitmap.

putall

(charmap)

;int marker_=p.

length()

; marker = p.

length()

;while

(right < s.

length()

)else

elseif(

!charmap.

containskey

(integer.

valueof

(s.charat

(right)))

)else

else}}

else}}

}return res;

}

其實我自己在寫的時候就覺得有些冗雜和煩瑣了,當然我一般還會花時間去優化一下,但也是因為這次比較著急,直接看到了大神的解法,讓我自己琢磨和學習了很久。

直接上**:

public list

findanagrams

(string s, string p)

else

else}if

(conter == plength)

}return result;

}

這裡其實沒有它的思路,然後我自己研究了一下,這裡做一下總結。

首先,我得說,是我自己陷入了固定的滑動視窗解體的套路當中,當然對於一些題目來說,滑動視窗是非常有效率的,但是不應該只是知道了滑動視窗就限制了自己的思路。

作者宣告了

int slength = s.length();

int plength = p.length();

int conter = 0;

stringbuilder sb = new stringbuilder§;

list result = new arraylist();

前兩個不用多說了,分別是長度。然後conter是記錄的當前已經掃瞄到了幾個屬於p串的字元。定義p的sb是為了記錄當前已經有哪些字元已經在s中找到了,找到了就把把它從sb中刪掉,那麼剩下的就是還沒有匹配到的。

result就是記錄結果了。

for ch in str.s 

}

大家共勉~~

Leetcode438 找到字串中所有字母異位詞

給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。說明 字母異位詞指字母相同,但排列不同的字串。不考慮答案輸出的順序。示例 1 輸入 s cbaebabacd p abc...

438 找到字串中所有字母異位詞

給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。說明 字母異位詞指字母相同,但排列不同的字串。不考慮答案輸出的順序。示例 1 輸入 s cbaebabacd p abc...

438 找到字串中所有字母異位詞

給定乙個字串 s 和乙個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。字串只包含小寫英文本母,並且字串 s 和 p 的長度都不超過 20100。說明 字母異位詞指字母相同,但排列不同的字串。不考慮答案輸出的順序。示例 1 輸入 s cbaebabacd p abc...