【LeetCode】每日一题 2023_11_8 最长平衡子字符串

文章目录

  • 刷题前唠嗑
  • 题目:最长平衡子字符串
    • 题目描述
    • 代码与解题思路
    • 偷看大佬代码
  • 结语

刷题前唠嗑

【LeetCode】每日一题 2023_11_8 最长平衡子字符串_第1张图片
LeetCode? 启动!!!

题目:最长平衡子字符串

题目链接:2609. 最长平衡子字符串

题目描述

【LeetCode】每日一题 2023_11_8 最长平衡子字符串_第2张图片

代码与解题思路

我先是自己模拟了一下,然后过了测试样例,一运行就挂了,一看发现题目看漏了条件,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。

结语

遇到不会做的题目,获取新的思路,开阔视野和想法,这就是每日一题对我的意义

你可能感兴趣的:(LeetCode,每日一题,leetcode,算法,职场和发展)