• 最长括号化长度 java


    1:求最长括号,

    ()(()()(  例如,它的最长符合括号化的长度为4 
    package com.li.huawei;
    
    import java.util.Arrays;
    import java.util.Stack;
    
    public class Question3 {
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            String input="()(()()(";
            System.out.println(longestValidTokens(input));
        }
        public static int  longestValidTokens(String input) {
    
            int[] arr = new int[input.length()];
            char[] inputArray=input.toCharArray();
            int length=inputArray.length;
            if(length==0)
                return 0;
            int validLength=0;
            int maxValidLength=0;
            Stack<Character> stack=new Stack<>();
            for(int i=0;i<length;i++){
                if(inputArray[i]==')')
                {
                    if(stack.isEmpty())
                    {
                        validLength=0;
                    }
                    else {
                        char tempPeek=stack.peek();
                        if(tempPeek=='(')
                        {
                            stack.pop();
                            validLength=validLength+2;
                            if (i - validLength >= 0) {
                                arr[i]=arr[i-1]+2+arr[i-validLength];  //动态规划,判断是否和上一个符合括号方案的括号是否相邻。
                            }else {
                                arr[i]=arr[i-1]+2;
                            }
                            maxValidLength=Math.max(maxValidLength, validLength);
                        }
                        else {
                            validLength=0;
                        }
                    }
                } else {
                    stack.push(inputArray[i]);
                    validLength=0;
                }
            }
    
            Arrays.sort(arr);
            System.out.println(arr[arr.length-1]);
            return arr[arr.length-1];
        }
    
    }

    算法分析: 例如字符串

    1:读取字符'('

    到该位置的最长括号长度

    2:读取字符')',  进行判断

       

    到该位置的最长括号长度

    3:挨个读取'((('

        

    到该位置的最长括号长度

    4:读取'(' 。

       

    到该位置的最长括号长度

    5:挨个读取'(('

    到该位置的最长括号长度。

    arr[i]=arr[i-1]+2+arr[i-validLength];  //动态规划,判断是否和上一个符合括号方案的括号是否相邻。
    因为((()))是和前面的()是挨着的,所以,它们两个合一块也是符合括号化方案的。 所以应该将两个加在一起。

     

    6:读取'('

      

    到该位置的最长括号长度。

    7:读取'('

    到该位置的最长括号长度。

    8:读取'('

    到该位置的最长括号长度。

    9:读取')'

    到该位置的最长括号长度。

    10  求出 数组中最大的值即为该最大化方案个数。

  • 相关阅读:
    逻辑分支中if小括号中的隐式转换
    逻辑运算符
    CSS——元素的显示与隐藏
    JS对象
    JS预解析与变量提升
    JS作用域
    JS函数
    CSS定位(position)
    JS数组
    JS分支结构与循环结构
  • 原文地址:https://www.cnblogs.com/liyafei/p/9520430.html
Copyright © 2020-2023  润新知