思路:假设要求区间[i,j]的最长匹配字串,它必然可以从[i,j-1]转移而来,有可能是s[j]与s[i]发生“关系”(匹配或不匹配),一直到s[j-1],若不发生“关系”,即s[j]跟自己发生“关系”,用for循环枚举所有的可能,取最大值。
代码:
?
#include
#include
#include
using namespace std; char s[105]; int dp[105][105];//代表[i,j]区间的最长匹配子串 int check(int i,int j) { if(s[i]=='('&&s[j]==')') return 1; if(s[i]=='['&&s[j]==']') return 1; return 0; } int main() { while(scanf("%s",s)&&strcmp(s,"end")!=0) { memset(dp,0,sizeof(dp)); int len=strlen(s); for(int i=0;i
?