乙個合法的括號匹配序列被定義為:
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:
輸入:
(())
()
輸出:
3
思路:要求lcs最大 那麼只改變乙個位置的序列的lcs最大 。
每次只挖出乙個字元 把它插入不同的位置 判斷是否為合法的序列 。
統計個數 最後再減去原序列。
c++**:
#include
using
namespace
std;
#include
#include
#include
//判斷字串是否合法
bool islegal(string s)
if(sta.empty())
return
true;
else
return
false;
}//核心步驟
int core(string s)
}record.erase(s);
return record.size();
}int main()
網易 最長公共子括號序列
乙個合法的括號匹配序列被定義為 1.空串 是合法的括號序列 2.如果 x 和 y 是合法的序列,那麼 xy 也是乙個合法的括號序列 3.如果 x 是乙個合法的序列,那麼 x 也是乙個合法的括號序列 4.每個合法的括號序列都可以由上面的規則生成 例如 都是合法的。從乙個字串s中移除零個或者多個字元得到...
網易筆試最長公共子括號序列
乙個合法的括號匹配序列被定義為 1.空串 是合法的括號序列 2.如果 x 和 y 是合法的序列,那麼 xy 也是乙個合法的括號序列 3.如果 x 是乙個合法的序列,那麼 x 也是乙個合法的括號序列 4.每個合法的括號序列都可以由上面的規則生成 例如 都是合法的。從乙個字串s中移除零個或者多個字元得到...
網易校招程式設計題
define crt secure no warnings 1 include include include includeusing namespace std 小易準備去魔法王國採購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩台魔法機器可以通過投入x x可以...