本文共 2061 字,大约阅读时间需要 6 分钟。
给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。
【方法一】
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); }}
转载地址:http://jiazi.baihongyu.com/