LeetCode算法题——最长有效括号

题目

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

 

代码实现

【方法一】

public class demo3 {	
	public static void main(String[] args) {		
		String string = "()()()()(((((()())()((()()))()()()()()()";
		char[] str = string.toCharArray();
		String x = "";
		int i = 0;
		int j = 0;
		boolean flag = true;
		while(true) {			
			if(str[i]=='('&&str[i+1]==')') {
				if(i==j+1) {
					x += String.valueOf(str[i]);
				}else {
					if(i==0) {
						x = x+String.valueOf(str[i]);
					}else {
						x = x+" "+String.valueOf(str[i]);
					}
				}
				while(true) {
					j = i+1;
					if(j==str.length-1) {
						x += String.valueOf(str[j]);
						flag = false;
						break;
					}
					if(str[j]==')'&&str[j+1]=='(') {
						x += String.valueOf(str[j]);
						i++;
						break;
					}else {
						break;
					}		
				}
			}
			i++;			
			if(i==str.length-1||flag==false)
				break;			
		}
		int count = 0;
		int index = 0;	
		for(int z=0;z

【方法二】

public class demo{
	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{
				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);
	}
}

 

【方法三】

public class demo{
	public static void main(String[] args) {
		String str="()))()()";
		int length=str.length();
		int maxlength=0;
		for(int i=0;imaxlength){
				maxlength=count;
			}
		}
				
		System.out.println("含有效括号的最大子串长度为:"+maxlength);
		
	}
}

 

你可能感兴趣的:(算法,leetcode)