早教吧 育儿知识 作业答案 考试题库 百科 知识分享

C++最长配对子串给定由(,),[,],{,},构成的一个括号字符串,输出它的一个最长子串,该子串有正确的括号配对。Input输入数据只有一行括号字符串,其长度不大于10000Output输出该括号字符串的最

题目详情
C++最长配对子串
给定由(,),[,],{,},构成的一个括号字符串,输出它的一个最长子串,该子串有正确的括号配对。
Input
输入数据只有一行括号字符串,其长度不大于10000
Output
输出该括号字符串的最长配对子串。若答案不唯一,则输出最左边一个;如果答案不存在,则输出“No Solution”。
Sample Input
[()()]][]
Sample Output
[()()]
▼优质解答
答案和解析
bool match(char c, char d)
{
return c=='[' && d==']'
|| c=='(' && d==')'
|| c=='{' && d=='}'
|| c=='';
}
int main()
{
char s[1024];
int mark[1024], i, k = 0, max = 0, low = 0, high = 0;
cin >> s;
for(i=0; s[i]; i++)
{
if(s[i]=='[' || s[i]=='(' || s[i]=='{' || s[i]==' {
mark[k++] = i;
continue;
}
if(k>0 && match(s[mark[k-1]], s[i]))
{
--k;
if(max < i-mark[k])
{
max = i-mark[k];
low = mark[k];
high = i;
}
}
else k = 0;
}
if(high > low)
{
for(i=low; i<=high; i++)
cout << s[i];
}
else cout << "No Solution";
}
看了C++最长配对子串给定由(,)...的网友还看了以下: