用栈 写快一些,不过我没用
想法:用集合存储输入的字符串,当集合为空时第一个字符串中第一个字符保存,当第二个字符串准备保存时,先与集合中的最后一个元素比较,如果不同则保存,如果值相同则移除集合中最后一个元素。如果最后集合为空则返回true,否则就是false。
用Map保存括号的对应值。
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/valid-parentheses
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
public static void main(String[] args) {
String st1 = "{[(]}";
System.out.println(a(st1));
}
//保存键值对
public static Map map() {
Map map = new HashMap();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
return map;
}
public static boolean a(String s){
ArrayList<Character> arr = new ArrayList();
if(s.isEmpty()){
return false;
}
for (int i = 0; i < s.length(); i++) {
if (arr.size() == 0) {
arr.add(s.charAt(i));
} else if (arr.size() != 0 && !(arr.get(arr.size() - 1).equals(map().get(s.charAt(i))))) {
arr.add(s.charAt(i));
}else if (arr.get(arr.size() - 1).equals(map().get(s.charAt(i)))){
// 利用arr.size()-1不能用i-1否则会越界
arr.remove(arr.size() - 1);
}
}
if (arr.isEmpty()) {
return true;
}else{
return false;
}
}