每日一題-Day32-字串的排列
阿新 • • 發佈:2021-11-22
滑動視窗
題目
給定兩個字串s1和s2,編寫一個函式判斷s2中是否包含s1的排列
示例:
輸入:s1 = "ab" s2 = "eidbaooo"
輸出:true
解釋:s2 包含 s1 的排列之一 ("ba")
輸入:s1= "ab" s2 = "eidboaoo"
輸出:false
解題思路
滑動視窗:與常規的滑動視窗題目不同,該題目要求判斷s2是否包含s1的排列,所以我們只需要判斷滑動視窗內字母的個數是否相同即可
class Solution { public boolean checkInclusion(String s1, String s2) { int n = s1.length(); int m = s2.length(); int[] temp1 = new int[26]; int[] temp2 = new int[26]; if (n > m) { return false; } for (int i = 0; i < n; i++) { //將各個字母對應的個數新增至陣列中 temp1[s1.charAt(i) - 'a']++; temp2[s2.charAt(i) - 'a']++; } //判斷兩個陣列中對應的字母數量是否相同 if (Arrays.equals(temp1, temp2)) { return true; } for (int i = n; i < m; i++) { //滑動視窗右端,向右移動一位 temp2[s2.charAt(i) - 'a']++; //滑動視窗左端,向右移動一位,需要減去原本位於視窗最左側的字母 temp2[s2.charAt(i - n) - 'a']--; //判斷字母數量是否一致 if (Arrays.equals(temp1,temp2)){ return true; } } return false; } }
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/permutation-in-string/submissions/