题目
题目链接:
https://leetcode-cn.com/problems/valid-parentheses/
解析:
就是判断字符串是否有正确的闭合和顺序
比如:“()”,“({ })”
这种用栈比较好实现,java中可以使用Connection集合来当栈使用,而map集合用来记录(),{},[]括号的值。
步骤:
- 判断是否是左括号,是的话就入栈
- 不是的话就将栈中的元素放出来,匹配map集合中的value,再与之判断
2.1 如果没有就返回false - 如果遍历下来,发现栈中没有元素就返回true,反之返回false.
代码:
public class solution20 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
System.out.println(isValid(s));
}
public static boolean isValid(String s) {
//创键一个map集合用于判断
Map<Character, Character> map = new HashMap<>();
map.put('(', ')');
map.put('{', '}');
map.put('[', ']');
map.put('?', '?');
//创建一个栈
LinkedList<Character> link = new LinkedList<>();
link.add('?');
//将字符串转换成字符数组
char[] c = s.toCharArray();
//遍历
for (char d : c) {
if(map.containsKey(d)) {//判断是否与map集合中的字符相等
link.addLast(d);//如果有就加入栈中
}else if(map.get(link.removeLast())!=d) {//判断是否与栈中取出的左括号对应的右括号
return false;//没有说明字符串不符合规范
}
}
return link.size()==1;
}
}