美文网首页
1156. 单字符重复子串的最大长度

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

作者: 红树_ | 来源:发表于2023-06-02 21:56 被阅读0次

只要无惧于尝试,没有人会彻底失败。

LC每日一题,参考1156. 单字符重复子串的最大长度

题目

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

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

输入:text = "ababa"
输出:3
输入:text = "aaabaaa"
输出:6
输入:text = "aaabbaaa"
输出:4
输入:text = "aaaaa"
输出:5
输入:text = "abcdef"
输出:1

解题思路

  • 滑动窗口:遍历字符串,每次碰到不同的字符时,计算交换一次的最长子串,之后开始新的字符统计。

滑动窗口

class Solution {
    public int maxRepOpt1(String text) {
        //考虑滑动窗口
        char[] tc = text.toCharArray();
        int n = tc.length;
        //首先统计字符计数
        int[] count = new int[26];
        for(int i = 0; i < n; i++) count[tc[i]-'a'] ++;
        //遍历连续字符 如果碰到不同的字符可以根据剩余该字符来判断是否能交换
        int ans = 1,i = 1,max = 1;
        char pre = tc[0];
        while(i < n) {//统计每个字符开始后的最长
            if(tc[i] == pre) {
                i++;
                max++;
                ans = Math.max(ans,max);
            }else{ //尝试交换
                if(count[pre-'a'] > max) {
                    int j = i+1,add = 0;
                    while(j < n && tc[j] == pre){
                        add++;//交换后最多增加的长度
                        j++;
                    } 
                    if(max + add < count[pre-'a']) max += add + 1;
                    else max += add;
                    ans = Math.max(ans,max);
                }
                //开始新字符统计
                pre = tc[i++];
                max = 1;
            }
        }
        if(count[pre-'a'] > max) ans = Math.max(ans,max+1);//最后一个字符
        return ans;
    }
}

复杂度分析

  • 时间复杂度:O(n),访问字符串次数不超过2n,n为字符串长度。
  • 空间复杂度:O(k),哈希计数空间固定为k = 26

相关文章

  • 【python欢聚时代】计算重复字符串长度?

    题目:请从字符串中找出至少重复一次的子字符串的最大长度 输入描述: 字符串,长度不超过1000 输出描述: 重复子...

  • 3. Loongest Substring Without Re

    题目 给定一个字符串 s,找出这个不重复字符串的最长字串长度。 解析 找出这个字符串不重复子串的最大长度。记录上一...

  • 【leetcode3】 3. Longest Substrin

    关键字:最长不重复子串、双指针 难度:Medium 题目大意:求一个字符串最长不重复子串的长度 题目: Given...

  • 最长不重复问题

    题目:求最长无重复子串从一个字符串中找到一个连续子串,该子串中任何两个字符不能相同,求子串的最大长度并输出一条最长...

  • Longest Substring Without Repeat

    题目:求最长无重复子串从一个字符串中找到一个连续子串,该子串中任何两个字符不能相同,求子串的最大长度并输出一条最长...

  • Python编程题16--最长不重复子串

    题目 给定一个字符串,请从这个字符串中找出所有最长的没有重复字符的子串,并返回最长不重复子串的长度。 例如:字符串...

  • 无重复字符串的最长子串

    题目大意:给定一个字符串,找出不含有重复字符的最长子串的长度 解读: 1、给定abcabcbb,没有重复子串的最长...

  • 算法1-无重复字符的最长子串

    无重复字符的最长子串 首先分析一下题目,求给定字符串的最长不重复子串,思路应该是分治不断降规模,把长度为n的字符串...

  • Leetcode Weekly Contest 147

    1. 题目列表 第 N 个泰波那契数(简单) 字母板上的路径(模拟行走) 单字符重复子串的最大长度 子数组种占绝大...

  • leetcode-动态规划

    1668. 最大重复子字符串[https://leetcode-cn.com/problems/maximum-r...

网友评论

      本文标题:1156. 单字符重复子串的最大长度

      本文链接:https://www.haomeiwen.com/subject/qbemedtx.html