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

2021-08-07 23:43:07 字數 1135 閱讀 6879

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

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.

思路:每次在原字串中取出乙個字元,將取出的字元在剩餘的字串中插空,剩餘字串保持相對位置不變,

如果插孔後的字串符合括號規則,而且與原字串不相同,那麼這個字串就是長度與原字串相同的

乙個符合條件的字串結果,且能夠保證lcs(s,t)最大。將符合條件的字串存入乙個map中,最後

統計map的size即可。

public class main }}

system.out.println(map.size());

"(())()"));

}

public static boolean istrue(string s)

}else

}if (stack.size() == 0)

return true;

else

return false;

}}

網易 最長公共子括號序列

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

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

題目 乙個合法的括號匹配序列被定義為 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是否合...