P1944 最長括號匹配(DP)

注意數組下標及因下標爲負值而造成的數組越界問題。

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int N=1000005;
string s;
int f[N],ans;
int main(){
	cin>>s;
	int len=s.length();
	for(int i=1;i<len;i++){
		if(s[i]=='('||s[i]=='[') continue;
		else{
			if(((s[i]==')'&&s[i-1-f[i-1]]=='(')||(s[i]==']'&&s[i-1-f[i-1]]=='['))&&i-2-f[i-1]>=0){
				f[i]=f[i-1]+2+f[i-f[i-1]-2];
				ans=max(f[i],ans);
			}
		}
	}
	for(int i=0;i<len;i++){
		if(f[i]==ans){
			for(int j=i-ans+1;j<=i;j++){
				printf("%c",s[j]);
			}
			return 0;
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章