河南住房城乡建设厅官方网站,百度在线,个人公司网站建设,超级外链发布题目描述
给定两个字符串 s1 和 s2#xff0c;写一个函数来判断 s2 是否包含 s1 的排列。
换句话说#xff0c;第一个字符串的排列之一是第二个字符串的子串。
示例1: 输入: s1 “ab” s2 “eidbaooo” 输出: True 解释: s2 包含 s1 的排列之一 (“ba”). 示例2: 输入: …题目描述
给定两个字符串 s1 和 s2写一个函数来判断 s2 是否包含 s1 的排列。
换句话说第一个字符串的排列之一是第二个字符串的子串。
示例1: 输入: s1 “ab” s2 “eidbaooo” 输出: True 解释: s2 包含 s1 的排列之一 (“ba”). 示例2: 输入: s1 “ab” s2 “eidboaoo” 输出: False 注意
输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间
解法1数组滑动窗口
public boolean checkInclusion(String s1, String s2) {if(s1 null || s2null || s1.length()s2.length()) {return false;}int l s1.length();int[]arr1new int[26], arr2new int[26];//初始化数组for(int i0; il; i) {arr1[s1.charAt(i)-a] ;arr2[s2.charAt(i)-a] ;}//滑动窗口for(int il;is2.length();i) {if(isSimilar(arr1, arr2)) {return true;}arr2[s2.charAt(i-l)-a]--;arr2[s2.charAt(i)-a];}return isSimilar(arr1, arr2);}private boolean isSimilar(int []arr1, int[] arr2) {for(int i0;iarr1.length;i) {if(arr1[i] ! arr2[i]) {return false;}}return true;}