问题描述
【题目描述】
【输入】
【输出】
【样例输入】
((xx|xxx)x|(x|xx))xx
【样例输出】
6
题目解析
首先,搞清楚题目输入的只有四个字符即" ( ( ("、" ) ) )"、" x x x"、" ∣ | ∣",我们只需要分析遇到这四种字符需要做些什么即可。
定义 p o s pos pos和 t m p tmp tmp变量分别表示当前字符位置和当前最大连续 x x x的个数,通过 w h i l e while while循环遍历整个字符串。
- 当遇到" x x x"时,临时变量 t m p tmp tmp++;
- 当遇到" ( ( ("时, t m p + = ) tmp+=) tmp+=)之前的最大连续 x x x的个数;
- 当遇到" ) ) )"时就返回从 ( ( (开始的最大 x x x的个数;
- 当遇到" ∣ | ∣"时,就用 m a x max max函数比较两边的最大连续 x x x的个数并把这个值赋给 t m p tmp tmp
注意 w h i l e while while循环保证能遍历整个字符串且不走回头路。
C++代码
#include<bits/stdc++.h>
using namespace std;
char s[100];
int len;
int pos;
int f() //求出当前字符串自当前下标到结束能匹配的x长度
{
//int ans = 0;
int tmp = 0; //用于保存连续的x长度
int m = 0; //存放|两侧较大的数
while(pos<len)
{
if(s[pos]=='(')
{
pos++;
tmp+=f(); //等待后面的结果
}
else if(s[pos]=='x')
{
pos++;
tmp++;
}
else if(s[pos]=='|')
{
pos++;
m = max(m,tmp);
tmp = 0;
}
else if(s[pos]==')')
{
pos++;
m = max(m,tmp);
return m;
}
}
m = max(m,tmp);
return m;
}
int main()
{
scanf("%s",&s);
len = strlen(s);
int ans = f();
printf("%d\n",ans);
return 0;
}