LeetCode567字符串的排列

字符串的排列>>>
在這裏插入圖片描述

滑動窗口


class Solution {
    public boolean checkInclusion(String s1, String s2) {

        Character[] s1Aray = new Character[s1.length()];
        Character[] s2Aray = new Character[s2.length()];
        //s1中的字符串存儲在map中
        Map<Character,Integer> map = new HashMap<>();

        for(int i=0;i<s1.length();i++){
            s1Aray[i]=s1.charAt(i);
            map.put(s1.charAt(i),map.getOrDefault(s1.charAt(i),0)+1);
        }

        for(int i=0;i<s2.length();i++){
            s2Aray[i]=s2.charAt(i);
        }
        int left = 0;
        int right = 0;

        while(right<s2.length()){

            //將map中對應的值減去1
            if(map.containsKey(s2Aray[right])){
                map.put(s2Aray[right],map.getOrDefault(s2Aray[right],0)-1);
            }

            //若個數相等
            if(right-left==s1.length()-1){
                if(matches(map)){//完全匹配
                    return true;
                }else{//不匹配則縮小窗口

                    //將map中對應的值減去1
                    if(map.containsKey(s2Aray[left])){
                        map.put(s2Aray[left],map.getOrDefault(s2Aray[left],0)+1);
                    }
                    left++;
                    right++;
                }

            }else{//個數不等則擴大窗口
                right++;
            }


        }

        return false;
    }

    public boolean matches(Map<Character,Integer> map){
        for(Integer i: map.values()){
            if(i!=0) return false;
        }
        return true;
    }

}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章