题目如图
首先明确的是,可以有(()) ([])诸如此类的表达的。
然后用栈实现算法是,较为容易的。
判断总长度,不是2的倍数,返回false。
如果第一个是)]},返回false。
如果是( [ {则压入栈中
如果是)则看栈顶是不是(,如果不是,那么返回false。其他,类似。
执行完循环,如果栈为空,返回true。栈不为空,返回false。
用linkedlist实现栈。
构造函数,举例:
LinkedList link=new LinkedList(); LinkedList<String> link=new LinkedList<String>();
注意,不能是
LinkedList<char> link=new LinkedList<char>();
这个例子是错的。至于为什么是错的,我不知道。我实践过,不对,并看到网上竟没有这种用法,所有处理字符char时把它当作string处理吧,如本题。
方法
add方法
clear方法
clone方法
remove方法
get方法
import java.io.*; import java.util.*; public class Solution { public static boolean isValid(String s) { int len=s.length(); if(len%2==1) return false; char[] c=s.toCharArray(); int i; LinkedList<String> linkl=new LinkedList<String>(); int index=0; if(c[0]==‘)‘||c[0]==‘]‘||c[0]==‘}‘) return false; for(i=0;i<len;i++) { switch(c[i]) { case ‘(‘:linkl.add("(");break; case ‘)‘: if(linkl.getLast()=="(") linkl.removeLast(); else return false; break; case ‘[‘:linkl.add("[");break; case ‘]‘: if(linkl.getLast()=="[") linkl.removeLast(); else return false; break; case ‘{‘:linkl.add("{");break; case ‘}‘: if(linkl.getLast()=="{") linkl.removeLast(); else return false; break; default: return false; } } if(linkl.size()==0) return true; else return false; } public static void main(String[] args) { System.out.println(isValid("(([]))[]{}")); System.out.println(isValid("()[[{}")); System.out.println(isValid("(])[]{}")); System.out.println(isValid("(()])}[}[}[]][}}[}{})][[(]({])])}}(])){)((){")); } }
我爱coding,coding使我快乐。
我爱记单词,记单词使我快乐。
时间: 2024-10-11 06:26:42