原题链接:1050-括号匹配
题目
给定一个仅由 '(',')','{','}','[',']' 构成非空字符串,判定该字符串中括号是否成对出现,并按顺序闭合。
如:
(1)输入:[{()}] 输出:true
(2)输入:[{[)}] 输出:false
输入、输出描述
输入:str: 非空字符串
输出:如果str中的括号成对出现,并按顺序闭合,则返回true;否则返回false
Example
输入:str=[{[)}]
输出:false
解法
思路:
本题考查的是栈问题,使用一个字符数组char[] 和一个整数指针 构成一个栈。
依次遍历输入字符串数组的每一个字符,如果遇到字符:'{','[','(',则压入栈中,
如果遇到字符:'}',']',')',则从栈中弹出一个字符,有以下两种情况导致匹配失败:
(1)栈为空
(2)栈顶字符和当前字符不匹配,如'{'和']'不匹配
当遍历完整个字符序列时,如果栈为空,则表示所有的字符匹配成功,否则匹配失败。
java Code:
public class Main1050 {
public boolean solution(String str) {
if (str == null || str.isEmpty()) { //对输入字符串进行合法性校验
return false;
}
char[] stack = new char[str.length()];
int top = 0;
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch == '{' || ch == '[' || ch == '(') {
stack[top++] = ch;
} else {
//栈为空
if (top == 0) {
return false;
}
char ch1 = stack[--top];
//括号不匹配
if ((ch1 == '{' && ch != '}') ||
(ch1 == '[' && ch != ']') ||
(ch1 == '(' && ch != ')')
) {
return false;
}
}
}
return top == 0 ? true : false;
}
public static void main(String[] args) {
Main1050 x = new Main1050();
String test = "{[()]}";
System.out.println(x.solution(test));
test = "[)";
System.out.println(x.solution(test));
}
}
以上代码在k6k4在线编程通过所有的case: 原题链接:1050-括号匹配
Successed! Case passed count:6/6 [Time]1 millisecond [Memory]1KB