Найдите последовательность k-го действительного скобки [duplicate]

Если во время проверки не появляется ошибка MySQL, убедитесь, что вы правильно создали таблицу базы данных. Это случилось со мной. Ищите любые нежелательные запятые или цитаты.

6
задан ankita 17 October 2015 в 12:01
поделиться

1 ответ

Пусть S= any valid sequence of parentheses from n( and n). Теперь любая действительная последовательность S может быть записана как S=X+Y, где

  • X=valid prefix, т.е. если пересечение X слева направо, в любой момент времени numberof'(' >= numberof')'
  • Y=valid suffix, т. е. если пересечение Y справа налево, в любой момент времени, numberof'(' <= numberof')'

Для любого S возможно множество пар X и Y .

В нашем примере: ()(())

`()(())` =`empty_string + ()(())` 
         = `( + )(())`
         = `() + (())` 
         = `()( + ())` 
         = `()(( + ))` 
         = `()(() + )`
         = `()(()) + empty_string`

Обратите внимание, что когда X=empty_string, число действительных S из n ( и n ) = число действительного суффикса Y из n ( и n )

Теперь алгоритм будет выглядеть следующим образом: мы начнем с X= empty_string и будем рекурсивно расти X до X=S. В любой момент времени у нас есть два варианта роста X: либо добавьте '(' или append ')'

. Пусть 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];
}`

Давайте возьмем пример, n = 3, т. е. 3 ( и 3 ) Теперь в самом начале X=empty_string, поэтому

dp[3][3] = число действительных последовательность S с использованием 3 ( и 3 ) = количество действительных суффиксов Y из 3 ( и 3 )

5
ответ дан ankita 1 September 2018 в 05:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: