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  猪猪&#128055;  阅读(83)  评论(0)    收藏  举报

导航