438. 找到字串中所有字母異位詞(暴力,雙指標)2
給定一個字串 s 和一個非空字串 p,找到 s 中所有是 p 的字母異位詞的子串,返回這些子串的起始索引。
字串只包含小寫英文字母,並且字串 s 和 p 的長度都不超過 20100。
說明:
字母異位詞指字母相同,但排列不同的字串。
不考慮答案輸出的順序。
示例 1:
輸入:
s: "cbaebabacd" p: "abc"
輸出:
[0, 6]
解釋:
起始索引等於 0 的子串是 "cba", 它是 "abc" 的字母異位詞。
起始索引等於 6 的子串是 "bac", 它是 "abc" 的字母異位詞。
示例 2:
輸入:
s: "abab" p: "ab"
輸出:
[0, 1, 2]
解釋:
起始索引等於 0 的子串是 "ab", 它是 "ab" 的字母異位詞。
起始索引等於 1 的子串是 "ba", 它是 "ab" 的字母異位詞。
起始索引等於 2 的子串是 "ab", 它是 "ab" 的字母異位詞。
解法一:滑動視窗
class Solution {
public List<Integer> findAnagrams(String s, String p) {
// 先對目標串p每個字元進行字元計數,統計出每個字元的出現次數
int pLength = p.length();
int sLength = s.length();
int[] counts = new int[26];
for(int i = 0; i < pLength; i++){
counts[p.charAt(i) - 'a']++;
}
ArrayList<Integer> res = new ArrayList<>(); // 儲存結果的結果集
int[] tempCounts = new int[26]; // 記錄視窗內每種字元的出現次數
int left = 0, right = 0;
while(right < sLength){
int curR = s.charAt(right) - 'a';
tempCounts[curR]++; // curR字元的出現次數加一
right++; // 新增一個字元後,視窗右指標右移一位
while(tempCounts[curR] > counts[curR]){ // 不斷縮小視窗大小,直到把超標字元移出去一個,使得不超標
tempCounts[s.charAt(left) - 'a']--;
left++; // 移走一個字元後視窗左指標右移一位
}
if(right - left == pLength){
res.add(left);
}
}
return res;
}
}
相關文章
- 438. 找到字串中所有字母異位詞字串
- 有效的字母異位詞
- leedcode-有效的字母異位詞
- 【leetcode 49】【字母異位詞分組】LeetCode
- LeetCode初級演算法之字串:242 有效的字母異位詞LeetCode演算法字串
- LeetCode 49. 字母異位詞分組LeetCode
- C語言重構【242】有效的字母異位詞C語言
- LeetCode 242 有效的字母異位詞(JAVA)LeetCodeJava
- Leetcode——242:有效字母的異位詞LeetCode
- lc 763.劃分字母區間(字串,雙指標)【***貪心演算法】字串指標演算法
- Q23 LeetCode242 字母異位詞LeetCode
- 力扣之僅僅反轉字母(雙指標方式)力扣指標
- 《雜湊表》242. 有效的字母異位詞《leetcode》LeetCode
- Q25 LeetCode49 字母異位詞分組LeetCode
- leetcode【每日一題】242. 有效的字母異位詞 javaLeetCode每日一題Java
- 雙指標指標
- 讓我們一起啃演算法----字母異位詞分組演算法
- 雙指標法指標
- C語言:將字串中所有小寫字母轉為大寫字母C語言字串
- Java中如何避免空指標異常Java指標
- C語言指標(三):陣列指標和字串指標C語言指標陣列字串
- 0506C語言練習:字串A中刪除字串B中所有相同字母等C語言字串
- 如何在 Java8 中風騷走位避開空指標異常Java指標
- 指標與字串排序指標字串排序
- Delphi字串指標操作字串指標
- leetcode 題解:python3@ 官方題解_暴力法_雙指標法LeetCodePython指標
- 力扣之迴文數(雙指標中的對撞指標公式模板)力扣指標公式
- Java中如何處理空指標異常Java指標
- 013--Hbuilder--js--將字串中所有大寫字母改成小寫,所有小寫字母改成大寫UIJS字串
- 雙指標(下標)的應用指標
- 演算法-雙指標演算法指標
- leetcode 11 題解:python3@ 官方題解_暴力法_雙指標法LeetCodePython指標
- c指標之字串常量指標字串
- LeetCode -844. 比較含退格的字串(棧、雙指標)LeetCode字串指標
- Python將所有的英文單詞首字母變成大寫Python
- 【LeetCode_344】反轉字串_Python&Java_雙指標解法LeetCode字串PythonJava指標
- 雙指標法相關的題指標
- 滑動視窗與雙指標指標