原题链接在这里:https://leetcode.com/problems/permutation-in-string/description/
题目:
Given two strings s1 and s2, write a function to return true if s2 contains the permutation of s1. In other words, one of the first string's permutations is the substring of the second string.
Example 1:
Input:s1 = "ab" s2 = "eidbaooo" Output:True Explanation: s2 contains one permutation of s1 ("ba").
Example 2:
Input:s1= "ab" s2 = "eidboaoo" Output: False
Note:
- The input strings only contain lower case letters.
- The length of both given strings is in range [1, 10,000].
题解:
如何知道s1是s2某一段的permutation. 只要确定这一段的char count相等就行.
利用sliding window 长度为s1.length累计char count.
Time Complexity: O(n). n = s1.length()+s2.length().
Space: O(1).
AC Java:
1 class Solution { 2 public boolean checkInclusion(String s1, String s2) { 3 int len1 = s1.length(); 4 int len2 = s2.length(); 5 if(len1 > len2){ 6 return false; 7 } 8 9 int [] count = new int[26]; 10 for(int i = 0; i<len1; i++){ 11 count[s1.charAt(i)-'a']++; 12 } 13 14 for(int i = 0; i<len2; i++){ 15 count[s2.charAt(i)-'a']--; 16 if(i>=len1){ 17 count[s2.charAt(i-len1)-'a']++; 18 } 19 20 if(allZero(count)){ 21 return true; 22 } 23 } 24 25 return false; 26 } 27 28 private boolean allZero(int [] count){ 29 for(int i = 0; i<count.length; i++){ 30 if(count[i] != 0){ 31 return false; 32 } 33 } 34 return true; 35 } 36 }