Hãy để S= any valid sequence of parentheses from n(and n)
. Bây giờ bất kỳ chuỗi S có giá trị có thể được viết như S=X+Y
nơi
X=valid prefix
tức là nếu đi qua X từ trái sang phải, tại bất kỳ thời điểm, numberof'(' >= numberof')'
Y=valid suffix
tức là nếu đi qua Y từ phải sang trái, bất cứ lúc nào thời điểm, numberof'(' <= numberof')'
Đối với bất kỳ S
nhiều cặp X
và Y
là có thể.
Ví dụ của chúng tôi: ()(())
`()(())` =`empty_string +()(())`
= `(+)(())`
= `() + (())`
= `()(+())`
= `()((+))`
= `()(() +)`
= `()(()) + empty_string`
Lưu ý rằng khi X=empty_string
, sau đó số hợp lệ S
từ n (
và n )
= số hậu tố hợp lệ Y
từ n (
và n )
Bây giờ, Thuật toán giống như sau: Chúng tôi sẽ bắt đầu với X= empty_string
và phát triển đệ quy X
cho đến X=S
. Tại bất kỳ thời điểm chúng tôi có hai lựa chọn để phát triển X
, hoặc nối thêm '(' hoặc nối thêm ')'
Hãy 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];
}`
Hãy lấy một ví dụ, n = 3 tức là 3 (
và 3 )
Ngay bây giờ ngay từ đầu X=empty_string
, do đó
dp[3][3]
= số thứ tự hợp lệ S
sử dụng 3 (
và 3 )
= số hậu tố hợp lệ Y
từ 3 (
và 3 )
Nguồn
2014-10-25 22:58:37
vì vậy câu hỏi của bạn là gì? –
@WimOmbelets tôi đoán, thuật toán để giải quyết câu hỏi trên – Haris