leetcode - 2981. Find Longest Special Substring That Occurs Thrice I

Description

You are given a string s that consists of lowercase English letters.

A string is called special if it is made up of only a single character. For example, the string "abc" is not special, whereas the strings "ddd", "zz", and "f" are special.

Return the length of the longest special substring of s which occurs at least thrice, or -1 if no special substring occurs at least thrice.

A substring is a contiguous non-empty sequence of characters within a string.

Example 1:

复制代码
Input: s = "aaaa"
Output: 2
Explanation: The longest special substring which occurs thrice is "aa": substrings "aaaa", "aaaa", and "aaaa".
It can be shown that the maximum length achievable is 2.

Example 2:

复制代码
Input: s = "abcdef"
Output: -1
Explanation: There exists no special substring which occurs at least thrice. Hence return -1.

Example 3:

复制代码
Input: s = "abcaba"
Output: 1
Explanation: The longest special substring which occurs thrice is "a": substrings "abcaba", "abcaba", and "abcaba".
It can be shown that the maximum length achievable is 1.

Constraints:

复制代码
3 <= s.length <= 50
s consists of only lowercase English letters.

Solution

Brute Force

Because of the low constrains, a very simple brute force way would be: we get all the special subarrays, and then calculate each one's frequency, then get the largest length of the subarrays that meet the requirements.

Time complexity: o ( n 3 ) o(n^3) o(n3)

Space complexity: o ( 1 ) o(1) o(1)

With a more strict constrain, see this 2982. Find Longest Special Substring That Occurs Thrice II

Code

Brute Force

python3 复制代码
class Solution:
    def maximumLength(self, s: str) -> int:
        res = -1
        # s[i:j+1]
        for i in range(len(s)):
            for j in range(i, len(s)):
                if s[j] != s[i]:
                    break
                sub_string = s[i: j + 1]
                sub_string_fre = 0
                for k in range(0, len(s)):
                    if k + j + 1 - i > len(s):
                        break
                    if sub_string == s[k: k + j + 1 - i]:
                        sub_string_fre += 1
                if sub_string_fre >= 3:
                    res = max(res, j + 1 - i)
        return res
相关推荐
2501_924879263 分钟前
客流特征识别误报率↓76%!陌讯多模态时序融合算法在智慧零售的实战解析
大数据·人工智能·算法·目标检测·计算机视觉·视觉检测·零售
namehu10 分钟前
一次因企微域名限制引发的“骚操作”:Nginx 与 FRP 的踩坑排查实录
linux·nginx
云动雨颤11 分钟前
Linux下PXE服务器搭建
linux·运维·服务器
北京地铁1号线16 分钟前
广告推荐模型2:因子分解机(Factorization Machines, FM)
人工智能·算法·推荐算法
源远流长jerry23 分钟前
STM32之DMA详解
linux·网络·c++·stm32·单片机·嵌入式硬件
tianyuanwo38 分钟前
技术总结:AArch64架构下Jenkins Agent(RPM容器编译节点)掉线问题分析与排查
java·linux·jenkins
blasit1 小时前
Ubuntu 20.04.6交叉编译得到Ubuntu 16.04.6的可执行文件
linux·运维·ubuntu
七十二小時1 小时前
力扣热题——前K个高频元素
数据结构·算法·leetcode
500佰1 小时前
AI手办,Gemini 2.5 Flash Image 可一键制作高一致性人物手办
算法
轻松Ai享生活1 小时前
详解Linux LVM (Logical Volume Manager)
linux·后端