S= any valid sequence of parentheses from n(and n)
. 는 이제 유효한 시퀀스 S는 S=X+Y
로 기록 될 수있는
X=valid prefix
즉
Y=valid suffix
numberof'(' >= numberof')'
즉 오른쪽에서 Y를 통과하면 왼쪽 경우에 어떤 시간의 어느 시점에서, 왼쪽에서 오른쪽으로 X를 통과하는 경우 시간의 점, X
및 Y
의 S
많은 쌍에 대한 numberof'(' <= numberof')'
이 가능합니다.이 예
: ()(())
`()(())` =`empty_string +()(())`
= `(+)(())`
= `() + (())`
= `()(+())`
= `()((+))`
= `()(() +)`
= `()(()) + empty_string`
참고 때 X=empty_string
다음 N (
유효 S
수와 N )
= N (
유효 접미사 Y
수와 N )
이제 알고리즘은 다음과 같이 진행됩니다. X= empty_string
으로 시작하여 재귀 적으로 커집니다. X
까지 X=S
. 시간의 시점에서 우리는 dp[a][b]= number of valid suffixes using a '(' and b ')' given X
nop=num_open_parenthesis_left
ncp=num_closed_parenthesis_left
`calculate(nop,ncp)
{
if dp[nop][ncp] is not known
{
i1=calculate(nop-1,ncp); // Case 1: X= X + "("
i2=((nop<ncp)?calculate(nop,ncp-1):0);
/*Case 2: X=X+ ")" if nop>=ncp, then after exhausting 1 ')' nop>ncp, therefore there can be no valid suffix*/
dp[nop][ncp]=i1+i2;
}
return dp[nop][ncp];
}`
예를 취할 수 있습니다 보자 X
성장, 하나 추가하는 두 가지 옵션 '('또는 추가 ')'
이, N = 3 즉, 그러므로 3 (
과 매우 X=empty_string
시작에서 이제 3 )
,
dp[3][3]
= 3 (
등을 사용하여 올바른 순서 S
수 3 )
= 3
그래서 당신의 질문은 무엇입니까 유효 접미사
Y
의 수? –@WimOmbelets 위의 질문을 해결하는 알고리즘은 – Haris