栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

最长有效括号c语言

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

最长有效括号c语言

题目介绍

给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。

题目分析
给定一串有效的括号字符串,找出最长有效括号。分析时以'(' 为1,')'为-1。
其中有效括号字符串的特点为:有效括号内和为0;
字符串的特点为:从左至右加和小于0出现断点,从右至左加和大于0出现断点,两次循环判断断点后,剩下的就是被断点隔开的有效括号,其中最长的连续括号即所求。

思路

1.创建一个struct ITEM包含count和validNum,记录每一个分段。这里用双线链表实现。
2.创建主代码,对字符串进行循环,主要处理分段、记录、合并、统计工作。
3.分段:设置标识码SetItem=0,遇见')'时,将SetItem设置为1,遇见'('且SetItem=1时创建struct 4.ITEM并重置SetItem为0;
5.记录、合并:遇见'('时,count递增,单独编写一个subtraction()函数处理循环中出现')'的情况。

小于0,递减count。
等于0,对上一个片段调用subtraction()函数,直到上一个片段count也无法递减时,则返回1表示当前片段count需从0递减到-1,出现断点。
大于0,递减count,递增validNum,当递减后的count=0时,与前一个片段合并。
合并:循环ITEM链表,找出最大validNum*2就是最后所找的最长有效括号序列。

代码

int longestValidParentheses(char * s){
int count=0;
int sum=0;
int validnum=0;
int max=0;

while(*s!='')
{
    count++;
    if (*s == '(')
        sum++;
    else
        sum--;
    if (sum < 0)
    {
        sum = 0;
        *s = 'b';
    }
    s++;
}
s--;
for(sum = 0;count > 0;count--, s--)
{
    if (*s=='b')
    {
        max=(max > validnum)?max:validnum;
        validnum = 0;
        continue;
    }       
    else if (*s == '(')
        sum++;
    else if (*s == ')')
        sum--;
    if (sum > 0)
    {
        sum = 0;
        *s = 'b';
        max = (max > validnum) ? max : validnum;
        validnum = 0;
    }
    else 
        validnum++;
}
max = (max> validnum) ? max : validnum;
return max;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/954787.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号