public boolean checkInclusion(String s1, String s2) { if (s1.length()>s2.length()){ return false; } char[] nums1=new char[26]; char[] nums2=new char[26]; for (int i = 0; i < s1.length(); i++) { nums1[s1.charAt(i)-'a']++; nums2[s2.charAt(i)-'a']++; } int k=0; while (k<s2.length()-s1.length()){ if (match(nums1,nums2)){ return true; } nums2[s2.charAt(k+s1.length())-'a']++; nums2[s2.charAt(k)-'a']--; k++; } return match(nums1,nums2); } private boolean match(char[] nums1,char[] nums2){ for (int i = 0; i < nums1.length; i++) { if (nums1[i]!=nums2[i]){ return false; } } return true; }
解题思路:
采用数组+滑动窗口
数据避免的顺序排列的问题
创建两个窗口
1、短字符大小
2、比对窗口内数据是否一致,不一致的话窗口在后面字符上后移,减去第一个字段,增加最后一个新字符,再对比