zzulioj--10465--最长匹配子串(栈模拟)
来源:互联网 发布:石家庄优化公司 编辑:程序博客网 时间:2024/05/29 13:57
10456: 最长匹配子串
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 133 Solved: 27
[Submit][Status][Web Board]
Description
定义一个满足括号匹配的字符串为完美串。一个由'(',')'组成的字符串,怎么才能求出
来字符串S中最长的完美串(S的子串)的长度呢?
Input
输入的第一行是一个数字k,代表输入的样例组数(k < 100)。
每组样例是一个字符串只由'(',')'这两个字符组成的字符串s(|s| < 100000)。
Output
输出s中最长的匹配子串的长度。
Sample Input
3()()((())(
Sample Output
440
思路:因为是要找连续的括号配对,如果我们知道最长的括号配对序列的两个端点的坐标的话我们就可以找出最长的长度,这里我用两个栈模拟括号配对,括号进栈的同时我们记录他的坐标,括号出栈的时候对应的数字栈也一并出栈,这样的话最后栈里剩下的括号跟数字栈中的数字是对应的,这些括号是不能配对的,但是他们两侧的括号是可以完成配对的,模拟有点坑,需要加一些小技巧还有判断
#include<cstdio>#include<cstring>#include<cmath>#include<stack>#include<algorithm>using namespace std;char str[100000];stack<char>q;stack<int>p;int main(){int t;scanf("%d",&t);getchar();while(t--){memset(str,0,sizeof(str));while(!q.empty()) q.pop();while(!p.empty()) p.pop();scanf("%s",str);int l=strlen(str);p.push(1);for(int i=0;i<l;i++){if(q.empty()){q.push(str[i]);p.push(i+1);continue;}if(str[i]==')'){char ch=q.top();if(ch=='('){q.pop();p.pop();}else if(ch==')'||q.empty()){q.push(str[i]);p.push(i+1);}}else{q.push(str[i]);p.push(i+1);}}p.push(l);int pre,now;if(q.empty()) printf("%d\n",l);else{now=p.top();p.pop();int maxx=0;while(!p.empty()){pre=p.top();p.pop();int s=now-pre;if(s==1)s=0;maxx=max(maxx,s);now=pre;}if(maxx&1) maxx-=1;printf("%d\n",maxx);}}return 0;}
0 0
- zzulioj--10465--最长匹配子串(栈模拟)
- 模拟 最长上升子串
- zzuoj 10456: 最长匹配子串 【思维】
- 最长对称子串 -- 天梯模拟
- 最长公共子串、最长公共子序列、最长回文子串、模式匹配、最大子序列--字符串问题整理
- 最长公共子串、最长公共子序列、最长回文子串、模式匹配、最大子序列--字符串问题整理
- 最长不完全匹配子串频率计算-eaglet 的解法
- 正确匹配的最长的括号子串
- poj 2955 Brackets(区间DP求最长匹配子串)
- 51nod 1478 括号序列的最长合法子段(栈-括号匹配寻找最长合法子串长度及其个数)
- ZZULIOJ-【不是匹配】
- [NOI2016模拟5.14]最长公共子序列
- 【GDOI2018模拟8.7】最长公共子序列
- zzulioj 1874: 蛤玮学计网 (模拟)
- java: 正则匹配字符串中多个目标子串(贪婪匹配的模拟实现)
- 最长公共子串
- 最长公共子串
- 最长回文子串
- 【一天一道LeetCode】#16. 3Sum Closest
- sleep和wait的区别
- 学习笔记:The Log(我所读过的最好的一篇分布式技术文章)
- 数据结构与算法简介
- View的事件体系
- zzulioj--10465--最长匹配子串(栈模拟)
- 10倍效率的程序员的好习惯,你有几个?
- SSL 1230 战略游戏 树形dp
- Odd Even Linked List
- 【c语言】输出菱形图案
- c++学习之赋值兼容规则
- 链表和数组的区别
- POJ 3181 Dollar Dayz【递推 拆分存大数】
- 快速排序