lc 438 找到字符串中所有字母异位词
解题思路:滑动窗口
有一个很关键的点是,需要使用一个数组去存储每一个位置出现的次数
代码如下
package com.codeking.lc;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;/*** @author xiongjl* @since 2023/8/3 18:31 53*/
public class lc438 {public static void main(String[] args) {List anagrams = new lc438().findAnagrams("cbaebabacd", "abc");System.out.println(anagrams);}public List findAnagrams(String s, String p) {// 这个题目使用滑动窗口去解答,关键是这种题目,需要找到一个去比较的标准// 解法一,数组+滑动窗口// 处理p直接用数组存储int[] pArr = new int[26];for (int i = 0; i < p.length(); i++) {pArr[p.charAt(i) - 'a']++;}List res = new ArrayList<>();int l = 0, r = 0;int[] window = new int[26];char[] charArray = s.toCharArray();while (r < s.length()) {window[charArray[r] - 'a']++;if (r - l + 1 == p.length()) {// 滑动窗口比较,需要使用Arraysif (Arrays.equals(window, pArr)) {res.add(l);}window[charArray[l] - 'a']--;l++;}r++;}return res;}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
