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 }

思路:滑动窗口判断每一个长度相同的字符串与目标字符串是否匹配。

posted on 2022-04-27 15:08  阿ming  阅读(20)  评论(0)    收藏  举报

导航