最长有效括号对

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/m1f2c3/article/details/100170531

这道题是我从同学那里听来的,所以没法测验我的算法对不对,不过我试的用例都过了。时间复杂度O(n)。

一个字符串由中括号和小括号组成,问其中最长有效括号对是从哪里到哪里
例如
输入:()(([]))([)]
输出:0 7

import java.util.*;

public class Niuke0418 {
    public static void main(String[] args) {
        String str = "()(([]))([)]";
        char[] a = str.toCharArray();
        int[] res = fun(a);
    }

    public static int[] fun(char[] a){
        int[] mem = new int[a.length];
        for(int i = 0; i < a.length; ++i){
            if(a[i] == '('){

            }else if(a[i] == '['){

            }else if(a[i] == ')'){
                if(i - 1 >= 0){
                    if(a[i - 1] == '('){
                        if(i - 2 >= 0){
                            mem[i] = mem[i - 2] + 1;
                        }else{
                            mem[i] = 1;
                        }
                    }else if(a[i - 1] == ')' || a[i - 1] == ']'){
                        int index = i - mem[i - 1] * 2 - 1;
                        if(index >= 0){
                            if(a[index] == '('){
                                mem[i] = mem[i - 1] + 1;
                                if(index - 1 >= 0){
                                    mem[i] += mem[index - 1];
                                }
                            }
                        }
                    }else if(a[i - 1] == '['){


                    }else{

                    }
                }else{

                }
            }else if(a[i] == ']'){
                if(i - 1 >= 0){
                    if(a[i - 1] == '['){
                        if(i - 2 >= 0){
                            mem[i] = mem[i - 2] + 1;
                        }else{
                            mem[i] = 1;
                        }
                    }else if(a[i - 1] == ')' || a[i - 1] == ']'){
                        int index = i - mem[i - 1] * 2 - 1;
                        if(index >= 0){
                            if(a[index] == '['){
                                mem[i] = mem[i - 1] + 1;
                                if(index - 1 >= 0){
                                    mem[i] += mem[index - 1];
                                }
                            }
                        }
                    }else if(a[i - 1] == '('){


                    }else{

                    }
                }else{

                }
            }
        }
        int max = 0;
        int[] res = new int[2];
        for(int i = 0; i < mem.length; ++i){
            if(max < mem[i]){
                max = mem[i];
                res[0] = i - mem[i] * 2 + 1;
                res[1] = i;
            }
        }
        return res;
    }
}

猜你喜欢

转载自blog.csdn.net/m1f2c3/article/details/100170531
今日推荐