JavaInterview JavaInterview
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)

『Java面试+Java学习』
首页
指南
分类
标签
归档
  • CSDN (opens new window)
  • 文档集合 (opens new window)
  • 系统架构 (opens new window)
  • 微信号 (opens new window)
  • 公众号 (opens new window)
  • 指南
  • 简历

  • Java

  • 面试

  • 算法

  • algorithm
  • leetcode
JavaInterview.cn
2022-12-08
目录

单字符重复子串的最大长度Java

文章发布较早,内容可能过时,阅读注意甄别。

# 题目

如果字符串中的所有字符都相同,那么这个字符串是单字符重复的字符串。

给你一个字符串 text,你只能交换其中两个字符一次或者什么都不做,然后得到一些单字符重复的子串。返回其中最长的子串的长度。

示例 1:

输入:text = "ababa"
输出:3

示例 2:

输入:text = "aaabaaa"
输出:6

示例 3:

输入:text = "aaabbaaa"
输出:4

示例 4:

输入:text = "aaaaa"
输出:5

示例 5:

输入:text = "abcdef"
输出:1

提示:

  • 1 <= text.length <= 20000
  • text 仅由小写英文字母组成。

# 思路

二分加滑窗

# 解法


class Solution {
    
    String text;
    int[] total = new int[26];
    public int maxRepOpt1(String text) {
        for (char c : text.toCharArray()){
            total[c - 'a']++;
        }
        this.text = text;
        int left = 0;
        int right = text.length() + 1;

        while (left + 1 < right){
            int mid = (left + right) / 2;

            if (check(mid)){
                left = mid;
            }else {
                right = mid;
            }
        }

        return left;
    }

    private boolean check(int len) {
        int[] arr = new int[26];

        for (int i = 0; i < text.length(); i++) {
            int index = text.charAt(i) - 'a';
            arr[index]++;
            if (i >= len){
                arr[text.charAt(i - len) - 'a']--;
            }

            if (arr[index] == len || (arr[index] == len - 1 && total[index] >= len)){
                return true;
            }
        }

        return false;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

# 总结

  • 分析出几种情况,然后分别对各个情况实现
微信 支付宝
最近更新
01
1633. 各赛事的用户注册率 Java
07-02
02
1636. 按照频率将数组升序排序 Java
07-02
03
1639. 通过给定词典构造目标字符串的方案数 Java
07-02
更多文章>
Theme by Vdoing | Copyright © 2019-2025 JavaInterview.cn
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式