原题是这样的:
给定字符串序列 ()()??(?
判断 这里面包含几个完美闭合的()。?可以代表)或者(。
e.g. 上述序列的完美闭合() 字串是:
()
()
??
(?
()()
()??
??(?
()()??
()??(?
()()??(?
答案是10, 因为有十种可以完美闭合的字串。
注: (??) 可以表示为 ()()和(()) 都是完美闭合的括号。但是计数的时候算一次,因为要找多少组数量,而不是多少种组合。
对于这道题,我第一思路是,用一个char的数组,通过闭合消解的方式(把可以闭合的答案用‘0’来代替),最后判断char数组中是否全部为0,这样解决的算法非常难以平衡一些特殊情况,可能需要用递归方式判断各种可能性,而且算法效率也不高。
在众多码农中,有一个人写的答案让我叹为观止。
他的解法是这道题复杂度的最优算法 On^2。(必须两个for循环来遍历所有组合)
而他的判断方法如下:
假设str就是我们得到的序列
char[] cha = str.toCharArray();
int count = 0;
for(int i = 0; i< cha.length; i++){
int x = 0;
int y = 0;
for (int j = i; j<cha.length; j++){
if(cha[j]==')'){
x--;
y--;
}else{
if(cha[j]=='('){
x++;
y++;
}else{

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



