2018網易 最長公共子括號序列

2021-08-08 13:10:34 字數 2213 閱讀 7308

題目:

乙個合法的括號匹配序列被定義為:

1. 空串」「是合法的括號序列

2. 如果」x」和」y」是合法的序列,那麼」xy」也是乙個合法的括號序列

3. 如果」x」是乙個合法的序列,那麼」(x)」也是乙個合法的括號序列

4. 每個合法的括號序列都可以由上面的規則生成

例如」「, 「()」, 「()()()」, 「(()())」, 「(((()))」都是合法的。

從乙個字串s中移除零個或者多個字元得到的序列稱為s的子串行。

例如」abcde」的子串行有」abe」,」「,」abcde」等。

定義lcs(s,t)為字串s和字串t最長公共子串行的長度,即乙個最長的序列w既是s的子串行也是t的子串行的長度。

小易給出乙個合法的括號匹配序列s,小易希望你能找出具有以下特徵的括號序列t:

1、t跟s不同,但是長度相同

2、t也是乙個合法的括號匹配序列

3、lcs(s, t)是滿足上述兩個條件的t中最大的

因為這樣的t可能存在多個,小易需要你計算出滿足條件的t有多少個。

如樣例所示: s = 「(())()」,跟字串s長度相同的合法括號匹配序列有:

「()(())」, 「((()))」, 「()()()」, 「(()())」,其中lcs( 「(())()」, 「()(())」 )為4,其他三個都為5,所以輸出3.

輸入描述:

輸入包括字串s(4 ≤ |s| ≤ 50,|s|表示字串長度),保證s是乙個合法的括號匹配序列。

輸出描述:

輸出乙個正整數,滿足條件的t的個數。

輸入例子1:

(())()

輸出例子1:

3程式:

ac50%(超時)

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

bool isvalid(string s)

if (st.empty())

return

true;

else

return

false;

}int main()

if (s.size() == 2)

if (s.size() == 4)

int len = s.size();

string str="";

for (int i = 0; i < len/2; i++)

str = str + "()";

sort(str.begin(), str.end());

set all_str;

dowhile (next_permutation(str.begin(), str.end()));

map m;

for (int i = 0; i < len; i++)

/*for (auto it = all_str.begin(); it != all_str.end(); ++it)

if (*it == s)

all_str.erase(it);*/

int count = 0;

for (auto it = all_str.begin(); it != all_str.end(); ++it)}}

cout

<< count << endl;

return

0;}

ac(100%)

#include

#include

#include

#include

using

namespace

std;

string s;

bool judge(string);

int main()

}int res=0;

for(set

::iterator it=k.begin();it!=k.end();it++)

judge(*it)?res++:res=res;

printf("%d\n",res);

}}bool judge(string x)

return stk.empty()==true;

}

網易 最長公共子括號序列

乙個合法的括號匹配序列被定義為 1.空串 是合法的括號序列 2.如果 x 和 y 是合法的序列,那麼 xy 也是乙個合法的括號序列 3.如果 x 是乙個合法的序列,那麼 x 也是乙個合法的括號序列 4.每個合法的括號序列都可以由上面的規則生成 例如 都是合法的。從乙個字串s中移除零個或者多個字元得到...

網易筆試最長公共子括號序列

乙個合法的括號匹配序列被定義為 1.空串 是合法的括號序列 2.如果 x 和 y 是合法的序列,那麼 xy 也是乙個合法的括號序列 3.如果 x 是乙個合法的序列,那麼 x 也是乙個合法的括號序列 4.每個合法的括號序列都可以由上面的規則生成 例如 都是合法的。從乙個字串s中移除零個或者多個字元得到...

python 最長公共子括號序列

思路 求取和s擁有公共最長子序列的t的個數,那麼最長子序列元素個數就是len s 1,所以就通過將s的元素 除首尾外,因為合法元素首尾肯定是左右括號 逐個pop出來再在各個位置insert回去,得到一系列的t 這些t只要合法,那肯定就和s有最長公共子串行,長度為 len s 1 後 判斷這些t是否合...