FOJ 1411 最长配对子串

还是使用栈,如果存在不匹配的括号,那么这些括号最后都会剩余在栈中。

只要在压入栈的同时,带入这个符号在字符串的位置。

这样我们最后就可以根据栈中剩余的符号,来分割原来的字符串,并且也很容易取到最长的匹配。

 

本程序一次性AC,真的是没有想到。。。

写代码前理清思路,规范代码真的很重要。。

很搓的代码一般是不容易通过的。。要是通过了,说明你人品不错。

连续通过3题。你就可以考虑去买彩票了。。。股票也行。。。

必有收获~~哈哈。。

 

#include <stdio.h> #include <string.h> struct sta { char c; int n; }; int main() { char str[10001]; sta stack1[10001]; int num[10001]; int p_stack; int len; int i; while (scanf("%s", str)!=EOF) { memset(stack1, 0, sizeof(stack1)); memset(num, 0, sizeof(num)); p_stack = 0; len = strlen(str); for (i=0;i<len;i++) { switch (str[i]) { case '(': stack1[p_stack].c = str[i]; stack1[p_stack].n = i; p_stack++; break; case ')': if (stack1[p_stack-1].c == '(') p_stack--; else { stack1[p_stack].c = str[i]; stack1[p_stack].n = i; p_stack++; } break; case '[': stack1[p_stack].c = str[i]; stack1[p_stack].n = i; p_stack++; break; case ']': if (stack1[p_stack-1].c == '[') p_stack--; else { stack1[p_stack].c = str[i]; stack1[p_stack].n = i; p_stack++; } break; case '{': stack1[p_stack].c = str[i]; stack1[p_stack].n = i; p_stack++; break; case '}': if (stack1[p_stack-1].c == '{') p_stack--; else { stack1[p_stack].c = str[i]; stack1[p_stack].n = i; p_stack++; } break; case '<': stack1[p_stack].c = str[i]; stack1[p_stack].n = i; p_stack++; break; case '>': if (stack1[p_stack-1].c == '<') p_stack--; else { stack1[p_stack].c = str[i]; stack1[p_stack].n = i; p_stack++; } break; } } if (p_stack == len) { printf("No Solution/n"); continue; } if (p_stack == 0) { printf("%d/n", len); continue; } if (p_stack == 1) { if (len-stack1[0].n<=stack1[0].n) { for (i=0;i<stack1[0].n;i++) printf("%c", str[i]); } else { for (i=stack1[0].n;i<len;i++) printf("%c", str[i]); } printf("/n"); continue; } stack1[p_stack].n = len; p_stack++; num[0] = stack1[0].n-1; for (i=2;i<p_stack;i++) num[i-1] = stack1[i].n - stack1[i-1].n; int max = 0; int pos = 0; for (i=0;i<p_stack-1;i++) { if (max<num[i]) { max = num[i]; pos = i; } } for (i=stack1[pos].n+1;i<stack1[pos+1].n;i++) printf("%c", str[i]); printf("/n"); } return 0; }

你可能感兴趣的:(c)