1、题意
给定一个字符串,只包含字符'(', ')', '{', '}', '[' 和 ']',确定输入字符串是否有效。
括号必须以正确的顺序关闭,“()”和“( )[ ]{ }”都是有效的,但“( ]“和“([ )]”不是。
2、解题思路
将给定的字符串使用对应方法转换为一个字符数组,进行逐个遍历判断是否为左括号,如果是则使用push方法进行入栈,
如果不是进行值栈是否为空的判断,如果不为空,说明值栈中存在某一种左括号,则使用pop方法进行出栈,进行对比。
如果不能理解我表达的意思,可以自己参看代码进行理解。
3、注意
比较字符是用==,比较String是用equal(),因为String是引用类型,值相等但是地址可能不等。代码如下:
1 public static boolean isParen(String s ){ 2 if (s.length() == 0 || s.length() % 2 == 1){ 3 return false; 4 } 5 Stack<Character> stack = new Stack(); 6 for(int i = 0;i < s.length(); i++){ 7 if(s.charAt(i) == '{' || s.charAt(i) == '[' || s.charAt(i) == '('){ 8 stack.push(s.charAt(i)); 9 }else{ 10 if(stack.size()==0){ 11 return false; 12 } 13 Character top = stack.pop(); 14 if(s.charAt(i) == '}'){ 15 if(top == '{'){ 16 return true; 17 }else{ 18 return false; 19 } 20 }else if(s.charAt(i) == ']'){ 21 if(top == '['){ 22 return true; 23 }else{ 24 return false; 25 } 26 } 27 else if(s.charAt(i) == '('){ 28 if(top == ')'){ 29 return true; 30 }else{ 31 return false; 32 } 33 } 34 } 35 } 36 return stack.size() == 0; 37 }
4 、总结:
在写代码的时候忽略了其中栈是否为空的判断,出现异常java.util.EmptyStackException,在代码红色标记处进行添加得以解决,每一道leetcode题的思路都需要自己动手去写,去琢磨,那些有时候看似比较简单的问题,在你动手去编码的时候总会有一些细节被遗漏。思维的严谨性对于一个优秀的程序员来说非常重要。通过一道一道的算法题对自己编码技术,思维能力的不断提升。修得内功,内外结合,方能成为武林高手。每一道算法题都是对自己内功的一个提升。