括号匹配问题(java实现)
问题再现
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
-
1.左括号必须用相同类型的右括号闭合。
-
2.左括号必须以正确的顺序闭合。
-
注意空字符串可被认为是有效字符串
示例 1: 输入: "()" 输出: true 示例 2: 输入: "()[]{}" 输出: true 示例 3: 输入: "(]" 输出: false 示例 4: 输入: "([)]" 输出: false 示例 5: 输入: "{[]}" 输出: true
这道题之前已经用C语言的栈实现过,本次题解通过java语言实现。
代码如下
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
import java.util.Scanner;
public class kuohao
{
public boolean isMatch(String str)
{
Map<Character,Character> has = new HashMap<Character, Character>();
has.put('(',')');
has.put('[',']');
has.put('{','}');
char arr[] = str.toCharArray();
Stack<Character> stack = new Stack<>();
for (int i = 0; i < arr.length; i++) {
if(!stack.isEmpty())
{
if(arr[i] == ')' || arr[i] == ']' || arr[i] == '}')
{
if (stack.peek() == '(' || stack.peek() == '[' || stack.peek() == '{')
{
if (arr[i] == has.get(stack.peek())) {
stack.pop();
} else {
return false;
}
}
}
else
{
stack.push(arr[i]);
}
}
else
{
stack.push(arr[i]);
}
}
return stack.isEmpty();
}
}
public class kuohaoMain
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String str = sc.next();
kuohaohao kh = new kuohaohao();
boolean bl = kh.isMatch(str);
System.out.println(bl);
}
}