当前位置:网站首页>golang刷leetcode:最大波动的子字符串
golang刷leetcode:最大波动的子字符串
2022-08-02 20:38:00 【用户9710217】
字符串的 波动 定义为子字符串中出现次数 最多 的字符次数与出现次数 最少 的字符次数之差。
给你一个字符串 s ,它只包含小写英文字母。请你返回 s 里所有 子字符串的 最大波动 值。
子字符串 是一个字符串的一段连续字符序列。
示例 1:
输入:s = "aababbb"
输出:3
解释:
所有可能的波动值和它们对应的子字符串如以下所示:
- 波动值为 0 的子字符串:"a" ,"aa" ,"ab" ,"abab" ,"aababb" ,"ba" ,"b" ,"bb" 和 "bbb" 。
- 波动值为 1 的子字符串:"aab" ,"aba" ,"abb" ,"aabab" ,"ababb" ,"aababbb" 和 "bab" 。
- 波动值为 2 的子字符串:"aaba" ,"ababbb" ,"abbb" 和 "babb" 。
- 波动值为 3 的子字符串 "babbb" 。
所以,最大可能波动值为 3 。
示例 2:
输入:s = "abcde"
输出:0
解释:
s 中没有字母出现超过 1 次,所以 s 中每个子字符串的波动值都是 0 。
提示:
1 <= s.length <= 104
s 只包含小写英文字母。
解题思路:
1,问题简化:首先我们总是可以拆分出长度为1的子串,最小波动值必为1;因此本题就是求最大波动值
2,假设我们已经知道i位置之前的包含b的子串波动值f0(i-1,a,b),不包含b的子串波动值f1(i,a,b),其中a为出现频率最大的字符,b为出现频率最小的字符
3,对于i位置有三种情况:
A,s[i]==a
B,s[i]==b
C,是其他字符
4,对于情况B,又分两种情况需要考虑
B1,前i-1个字符中含有b
B2,前i-1个字符中不含b
5,递推方程如下
A,s[i]==a
f0(i,a,b)=f0(i-1,a,b)+1
f1(i,a,b)=f1(i-1,a,b)+1
B,s[i]==b
f0(i,a,b)=max(f0(i-1,a,b)-1,-1)
f1(i,a,b)=max(f1(i-1,a,b)-1,f0(i-1,a,b)-1,-1)
C,是其他字符
f0(i,a,b)=f0(i-1,a,b)
f1(i,a,b)=f1(i-1,a,b)
6,由于只依赖i-1位置,所以两个变量即可
代码实现
func largestVariance(s string) int {
res:=0
for a:='a';a<='z';a++{
for b:='a';b<='z';b++{
if a==b{
continue
}
for i,dp0,dp1:= 0,-10000,-10000; i < len(s);i++ {
v:=0
if s[i] == byte(a){
v=1
}
if s[i]==byte(b){
v=-1
}
if s[i]==byte(b){
dp1=max(dp1 + v, max(dp0 + v, v))
}else{
dp1 = dp1 + v
}
dp0 = max(dp0 + v, v)
res = max(res, dp1)
}
}
}
return res
}
func max(a,b int)int{
if a>b{
return a
}
return b
}
边栏推荐
猜你喜欢
【流媒体】推流与拉流简介
.NET performance optimization - you should set initial size for collection types
【3D视觉】realsense D435三维重建
Vscode快速入门、 插件安装、插件位置、修改vscode默认引用插件的路径、在命令行总配置code、快捷键
【实战 已完结】WPF开发自动化生产管理平台
"A daily practice, happy water problem" 1374. Generate a string with an odd number of each character
ECCV 2022 | ByteTrack: 简单高效的数据关联方法
二叉搜索树的实现
WPF development through practical 】 【 automatic production management platform
【目标检测】YOLOv5:640与1280分辨率效果对比
随机推荐
华为设备配置BFD多跳检测
李沐动手学深度学习V2-bert预训练数据集和代码实现
Bena的生命周期
奥特学园ROS笔记--7(289-325节)
Vscode快速入门、 插件安装、插件位置、修改vscode默认引用插件的路径、在命令行总配置code、快捷键
go——垃圾回收机制(GC)
Informatics Olympiad All-in-One (1259: [Example 9.3] Find the longest non-descending sequence)
9,共模抑制比一-不受输入信号中共模波动的影响。【如何分析共模CM抑制比。】
用户之声 | 大学生的“课外学堂”
14、学习MySQL 连接的使用
MSTP与STP
汉源高科2光12电千兆导轨式网管型工业以太网交换机双光自愈保护式以太网光交换机
一次线上事故,我顿悟了异步的精髓
如何成为一名正义黑客?你应该学习什么?
Solve the docker mysql can't write Chinese
callback prototype __proto__
李沐动手学深度学习V2-BERT预训练和代码实现
「每周译Go」这次我们来点不一样的!--《How to Code in Go》系列上线
The time series database has been developed for 5 years. What problem does it need to solve?
Wiring diagrams of switches, motors, circuit breakers, thermocouples, and meters