567. Permutation in String
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-09 19:02 猪猪🐷 阅读(83) 评论(0) 收藏 举报
浙公网安备 33010602011771号