• 最长括号化长度 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  求出 数组中最大的值即为该最大化方案个数。

  • 相关阅读:
    转:使用awk命令获取文本的某一行,某一列
    zookeeper单机伪集群配置
    “格式化HDFS后,HMaster进程启动失败”的问题解决
    php生成缩略图
    Sphinx 排序模式 SetSortMode
    shell 脚本中 命令
    coreseek(sphinx)错误:WARNING: attribute 'id' not found
    sphinx (coreseek)——3、区段查询 与 增量索引实例
    sphinx (coreseek)——2、区段查询实例
    sphinx(coreseek)——1、增量索引
  • 原文地址:https://www.cnblogs.com/liyafei/p/9520430.html
Copyright © 2020-2023  润新知