首页 > 其他 > 详细

【题解】力扣424. 替换后的最长重复字符

时间:2021-02-15 09:53:46      阅读:30      评论:0      收藏:0      [点我收藏+]

题目来源

567. 字符串的排列

思想及算法

双指针,滑动窗口

两个要点:

  1. 子串是连续的
  2. 第一个字符串不管怎样排序,出现的字符的次数是一定的,所以记录字符出现的频次即可。

一个左指针记录窗口开始位置,一个右指针记录窗口结束位置。

需要两个数组,一个数组用来记录字符串s1出现的次数,另一个数组用来维护窗口内字母出现的次数。

  • 窗口扩张:left不变,right++
  • 窗口滑动:left++,right++
class Solution {
    public boolean checkInclusion(String s11, String s22) {
		char[] s1 = s11.toCharArray();
        char[] s2 = s22.toCharArray();
        int len_1 = s1.length;
        int len_2 = s2.length;
        
        int[] freq_1 = new int[26];	// 记录s1字符串的字母出现的频率次数
        int[] freq_2 = new int[26];	// 记录窗口内字符串的字母出现的频率次数
        for(int i = 0;i<len_1;i++){	
            freq_1[s1[i]-‘a‘]++;
        }
        
        int left = 0;
        int right = 0;
        while(right < len_2){
            freq_2[s2[right]-‘a‘]++;
            if(right-left+1>len_1){	// 窗口长度大于s1的字符串
                freq_2[s2[left]-‘a‘]--;	// 去掉左边的字符,左指针向右移动
                left++;
            }
            if(Array.equals(freq_1, freq_2)){	// 如果两个数组记录的字符频次相同,即s2字符串包含了s1的字符串
                return true;
            }
            right++;
        }
        return false;
    }
}

【题解】力扣424. 替换后的最长重复字符

原文:https://www.cnblogs.com/zzzzzy2k/p/14401726.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!