首页 > 试题广场 >

包含不超过两种字符的最长子串

[编程题]包含不超过两种字符的最长子串
  • 热度指数:887 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
给定一个长度为 n 的字符串,找出最多包含两种字符的最长子串 t ,返回这个最长的长度。

数据范围: ,字符串种仅包含小写英文字母

输入描述:
仅一行,输入一个仅包含小写英文字母的字符串


输出描述:
输出最长子串的长度
示例1

输入

nowcoder

输出

2
示例2

输入

nooooow

输出

6
package main

import (
    "fmt"
    "os"
    "bufio"
)

var in=bufio.NewReader(os.Stdin)

func main() {
    var s string
    fmt.Fscan(in,&s)
    max:=0
    cnt:=map[byte]int{}
    for l,r:=0,0;r<len(s);r++{
        cnt[s[r]]++
        for len(cnt)>2{
            cnt[s[l]]--
            if cnt[s[l]]==0{
                delete(cnt, s[l])
            }
            l++
        }
        if r-l+1>max{
            max=r-l+1
        }
    }
    fmt.Println(max)
}

发表于 2023-03-29 09:26:20 回复(0)