java小编程----给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

package com.henu;

import java.util.Arrays;

/**
 * @author limengdong
 * @date 2019年7月19日
 * @classroom 208bigdata
 * @description:给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
 * 
 */

public class Demo13{
	public static void main(String[] args) {
		String string = "()())())()())))()()()()()";
		//将字符串转化为字符数组
		char[] ch = string.toCharArray();
		StringBuffer strB = new StringBuffer();
		//由题可知,这个字符串中只有(和);因此整个字符串当你判断时,只有四种可能'(('  '()'  '))'  ')('		
		for (int i = 0; i < ch.length -1; i++) {		
			if (ch[i] == '(' && ch[i+1] == ')') {
				strB.append("()");//当判断为()时,将strB中插入();
			}else if (ch[i] == '(' && ch[i+1] == '(') {
				strB.append("a");//当判断为((时,将strB中插入a
			}else if (ch[i] == ')' && ch[i+1] == ')') {
				strB.append("a");//当判断为))时,将strB中插入a
			}else{
				continue;//最后只有)(这种情况,无用的,因此跳出这个循环
			}
		}
		//将strB转化为String类型
		String str = new String(strB);
//		System.out.println(str);
		//对str进行split("a")
		String[] res = str.split("a");
//		System.out.println(Arrays.toString(res));//[()(), (), ()(), , , ()()()()()]
		//之后的方法就简单了,考虑每一个字符串的长度,最长的则是我们所要的
		int max = res[0].length();
		for (int i = 1; i < res.length; i++) {			
			if (max < res[i].length()) {
				max = res[i].length();
			}
		}
		System.out.println(max);
	}
}

 

你可能感兴趣的:(【JAVA】java小编程)