2022-7-24 剑指offer 滑动窗口

剑指 Offer II 014. 字符串中的变位词

难度中等

给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的某个变位词。

换句话说,第一个字符串的排列之一是第二个字符串的 子串 。

 1 class Solution {
 2     public boolean checkInclusion(String s1, String s2) {
 3         int[] cnt1=new int[26];
 4         int[] cnt2=new int[26];
 5         for (int i=0;i<s1.length();i++){
 6             char c=s1.charAt(i);
 7             cnt1[c-'a']++;
 8         }
 9         int l=0,r=0,n=s2.length();
10         while (r<n){
11             char c=s2.charAt(r);
12             cnt2[c-'a']++;
13             r++;
14             if (r-l<s1.length()){
15                 continue;
16             }
17             if (check(cnt1,cnt2)) return true;
18             else {
19                 cnt2[s2.charAt(l)-'a']--;
20                 l++;
21             }
22         }
23         return false;
24     }
25 
26     public boolean check(int[] a,int[] b){
27         for (int i=0;i<a.length;i++){
28             if (a[i]!=b[i]) return false;
29         }
30         return true;
31     }
32 }

思路:滑动窗口。可以用差分优化。

posted on 2022-07-24 11:37  阿ming  阅读(22)  评论(0)    收藏  举报

导航