有效的括号(Java实现)
题目:
给定一个只包括'(',')','{','}','[',']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 注意空字符串可被认为是有效字符串。
示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true
显然这就是栈的应用,入栈的元素如果和栈顶的元素配对,那么就栈顶出栈;判断下一个元素。
代码实现之:
package Day47; import java.util.Scanner; import java.util.Stack; /** * @Author Zhongger * @Description 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效。 * 有效字符串需满足: * 左括号必须用相同类型的右括号闭合。 * 左括号必须以正确的顺序闭合。 * 注意空字符串可被认为是有效字符串。 * @Date 2020.3.20 */ public class IsValidSolution { public static void main(String[] args) { IsValidSolution isValidSolution = new IsValidSolution(); Scanner input = new Scanner(System.in); String s=input.nextLine(); System.out.println(isValidSolution.isValid(s)); } public boolean isValid(String s) { if (s==null){ return false; } if (s.length()==0){ return true; } Stack<Character> stack = new Stack<>(); for (char c : s.toCharArray()) { if (stack.isEmpty()){ stack.push(c); continue; } Character peekChar = stack.peek(); if (c=='('){ if (peekChar==')'){ stack.pop(); }else { stack.push(c); } } else if (c==')') { if (peekChar=='('){ stack.pop(); }else { stack.push(c); } } else if (c=='{') { if (peekChar=='}'){ stack.pop(); }else { stack.push(c); } } else if (c=='}'){ if (peekChar=='{'){ stack.pop(); }else { stack.push(c); } } else if (c=='['){ if (peekChar==']'){ stack.pop(); }else { stack.push(c); } } else if (c==']'){ if (peekChar=='['){ stack.pop(); }else { stack.push(c); } } } if (stack.isEmpty()){ return true; } return false; } }