2022-4-27 滑动窗口
给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。
换句话说,s1 的排列之一是 s2 的 子串 。
1 import java.util.Arrays; 2 class Solution { 3 public boolean checkInclusion(String s1, String s2) { 4 if (s2.length()<s1.length()) return false; 5 int[] need=new int[26]; 6 int[] window=new int[26]; 7 int n=s1.length(); 8 for (int i=0;i<n;i++){ 9 need[s1.charAt(i)-'a']++; 10 } 11 int l=0,r=0; 12 int len=s2.length(); 13 while (r<len){ 14 window[s2.charAt(r)-'a']++; 15 r++; 16 if (r-l<n){ 17 continue; 18 }else{ 19 if (Arrays.equals(need,window)) return true; 20 window[s2.charAt(l)-'a']--; 21 l++; 22 } 23 24 25 } 26 return false; 27 } 28 }
思路:滑动窗口判断每一个长度相同的字符串与目标字符串是否匹配。
浙公网安备 33010602011771号