用java给出一个字符串,字符串中只有(、)、[、]、{、}六种字符。要求判断字符串中的括号是否合法匹配。字符串长度不超过10000个字符。判断每个字符串是否合法,合法则输出“YES”,否则输出”NO”。
时间: 2024-05-22 07:14:44 浏览: 45
思路:使用栈来判断括号是否匹配,遍历字符串,遇到左括号则入栈,遇到右括号则判断栈顶元素是否与其匹配,若匹配则弹出栈顶元素,否则返回“NO”。最后判断栈是否为空,若为空则返回“YES”,否则返回“NO”。
代码如下:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
String str = input.nextLine();
if (isValid(str)) {
System.out.println("YES");
} else {
System.out.println("NO");
}
}
input.close();
}
public static boolean isValid(String str) {
Stack<Character> stack = new Stack<>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '(' || c == '[' || c == '{') {
stack.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (stack.isEmpty()) {
return false;
}
char top = stack.pop();
if ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) {
return false;
}
}
}
return stack.isEmpty();
}
}
阅读全文