2609. 最长平衡子字符串

Posted lxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2609. 最长平衡子字符串相关的知识,希望对你有一定的参考价值。

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

方法:模拟

解题思路

统计当前\\(0\\)\\(1\\)的数量\\(cnt0\\)\\(cnt1\\),如果当前字符为\'\\(0\\)\',且\\(1\\)的数量不为\\(0\\),说明\\(0\\)前面出现\\(1\\),则重置\\(cnt0 = 1\\)\\(cnt1 = 0\\)。每次计算当前的最大值。

代码

class Solution 
public:
    int findTheLongestBalancedSubstring(string s) 
        if (s.length() == 0) return 0;
        int n = s.length(), ans = 0;
        int cnt0 = 0, cnt1 = 0;
        for (int j = 0; j < n; j ++ ) 
            if (s[j] == \'0\' && cnt1)  // 0前面出现1,重置数量
                cnt0 = 1, cnt1 = 0;
                continue;
            
            s[j] == \'0\' ? cnt0 ++ : cnt1 ++ ;
            ans = max(ans, min(cnt0, cnt1) * 2); // 取其中的最小值*2
        
        return ans;
    
;

复杂度分析

时间复杂度:\\(O(n)\\)
空间复杂度:\\(O(1)\\)

C语言实现最长公共子串与最长公共子序列

参考技术A 给定两个字符串s1="GeeksforGeeks",s2="GeeksQuizGo",则它们的最长公共子串为“Geeks”,长度为5。

运用动态规划的思想,将两个字符串映射为一张二维表,表格中的值代表到当前为止的最长公共子串的值,如下图所示:

生成这张表的步骤(假设这张表为t[][], r为行标,c为列标):

Code

整个算法的时间复杂度为O(len1 * len2),len1与len2分别为两个字符串的长度。

最长公共子序列与最长公共子串的区别是,最长公共子序列不要求“连续匹配”,它的目的是找到两个字符串中最大的公共部分。依然以s1="GeeksforGeeks",s2="GeeksQuizGo"为例,它们的最长公共子序列为“Geekso”和“GeeksG”,长度为6。

它的二维表如下所示:

它的生成步骤与最长公共子序列的最大不同在第3步,最长公共子序列在遇到s1[r] != s2[c]情况时,不会将t[r][c]重置为0,而是选择Max(t[r-1][c], t[r][c-1])作为新值,即它一直保存着前面已比较序列的最长公共序列值。

以上是关于2609. 最长平衡子字符串的主要内容,如果未能解决你的问题,请参考以下文章

具有错误字符容差的最长公共子串

第三次周赛 总结:是的,我在进步中。。。

355-II56-II1512

Codeforces 873B - Balanced Substring(思维)

MATLAB 最长公共子序列

最长递增子序列 && 最大子序列最长递增子序列最长公共子串最长公共子序列字符串编辑距离