题目链接:2609. 最长平衡子字符串
我先是自己模拟了一下,然后过了测试样例,一运行就挂了,一看发现题目看漏了条件,0 和 1 的数量是相对应的,每个 1 和每个 0 要对应,然后我改巴改巴没能把代码改对
然后我就非常丑陋的去看了题解
func findTheLongestBalancedSubstring(s string) (ans int) {
n := len(s)
for i := 0; i < n; {
a, b := 0, 0
for i < n && s[i] == '0' {
a++
i++
}
for i < n && s[i] == '1' {
b++
i++
}
ans = max(ans, min(a, b)*2);
}
return ans
}
func max(a, b int) int {
if a > b {
return a
}
return b
}
func min(a, b int) int {
if a > b {
return b
}
return a
}
真的就随便点开了一个,然后我就一眼看到了这样一句代码:ans = max(ans, min(a, b)*2),就是这一句,醍醐灌顶,他们怎么能这么天才,我真想不出来这种解法,只能含泪学习了,下次一定会做好吧,今天被简单题降服了
啊?
go 什么时候可以用 max 和 min 了,是我落后于时代了,呜呜,原来 go 早就能用 max 和 min 了,就我还在傻傻的自己实现,哭了
func findTheLongestBalancedSubstring(s string) (ans int) {
pre, cur := 0, 0
for i, c := range s {
cur++
if i == len(s)-1 || byte(c) != s[i+1] { // i 是连续相同段的末尾
if c == '1' {
ans = max(ans, min(pre, cur)*2)
}
pre = cur
cur = 0
}
}
return
}
看了一些题解,发现这道题的核心代码都是通样的思路,感觉这道题主要就是得想到这段:ans = max(ans, min(pre, cur)*2) 核心代码,其它细节怎么是实现就看个人了,想不出这个思路,就寸步难行
就像上面灵神的这段代码,他使用的就是 pre 记录上一段连续字符数量,cur 记录当前连续字符数量,然后求出 ans。
遇到不会做的题目,获取新的思路,开阔视野和想法,这就是每日一题对我的意义