567. Permutation in String (return true if s2 contains the permutation of s1.)
567. Permutation in String https://leetcode.com/problems/permutation-in-string/discuss/102588/Java-Solution-Sliding-Window 1. How do we know string p is a permutation of string s? Easy, each character in p is in s too. So we can abstract all permutation strings of s to a map (Character -> Count). i.e. abba -> {a:2, b:2}. Since there are only 26 lower case letters in this problem, we can just use an array to represent the map. 2. How do we know string s2 contains a permutation of s1? We just need to create a sliding window with length of s1, move from beginning to the end of s2. When a character moves in from right of the window, we subtract 1 to that character count from the map. When a character moves out from left of the window, we add 1 to that character count. So once we see all zeros in the map, meaning equal numbers of every characters between s1 and the substring in the sliding window, we know the answer is true. class Solution { public boolean checkInclusion(String s1, String s2) { // build a map of char and freq for s1 // the map of s1 is the window // travese the window on s2. if all the char freq change to 0, // we found one if(s1.length() > s2.length()) return false; int[] map = new int[26]; // a 's index is 0, because 'a' - 'a' = 0, b's index is 1, because 'b' - 'a' = 1 , z's index is 25 for(int i = 0; i < s1.length(); i++){ map[s1.charAt(i) - 'a']++; // at the same time , traverse the first few elements in s2 map[s2.charAt(i) - 'a']--; } if(match(map)) return true; // else , move the window // discard the old one, add the new one for(int i = s1.length(); i < s2.length(); i++){ map[s2.charAt(i) - 'a']--; map[s2.charAt(i - s1.length()) - 'a']++; if(match(map)) return true; } return false; } private boolean match(int[] map){ for(int freq : map){ if(freq != 0){ return false; } } return true; } }
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
posted on 2018-08-28 20:46 猪猪🐷 阅读(119) 评论(0) 收藏 举报
浙公网安备 33010602011771号