给定两个字符串 s1
和 s2
,写一个函数来判断 s2
是否包含 s1
的某个变位词。
换句话说,第一个字符串的排列之一是第二个字符串的 子串 。
示例 1:
1 2 3
| 输入: s1 = "ab" s2 = "eidbaooo" 输出: True 解释: s2 包含 s1 的排列之一 ("ba").
|
示例 2:
1 2
| 输入: s1= "ab" s2 = "eidboaoo" 输出: False
|
提示:
1 <= s1.length, s2.length <= 104
s1
和 s2
仅包含小写字母
同438. 找到字符串中所有字母异位词 - 力扣(LeetCode)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| class Solution { public boolean checkInclusion(String s1, String s2) { int len1 = s1.length(); int len2 = s2.length(); int[] hashmap = new int[26]; for(int i = 0; i < len1; i++){ hashmap[s1.charAt(i) - 'a'] ++; } int left = 0; int right = 0; while(right < len2){ char c = s2.charAt(right); hashmap[c - 'a'] --; while(hashmap[c - 'a'] < 0){ char lchar = s2.charAt(left); hashmap[lchar - 'a'] ++; left ++; } if(right - left + 1 == len1){ return true; } right ++; } return false; } }
|