Mon*_*lal -2 java stack hashmap
如何修复我的代码,以便找到有效的(){} []?现在,它只返回true.
public static boolean isValid(String s){
HashMap<Character, Character> specialChar= new HashMap<>();
specialChar.put('{', '}');
specialChar.put('[',']');
specialChar.put('(',')');
Stack<Character> stk = new Stack<>();
for (int i=0; i<s.length(); i++){
if (specialChar.keySet().contains(s.charAt(i))){
stk.push(s.charAt(i));
}
else if (specialChar.values().contains(s.charAt(i))){
if (!stk.empty()) {
stk.pop();
}
}
}
return stk.isEmpty();
}
System.out.println(isValid("{}{lll}]"));
Run Code Online (Sandbox Code Playgroud)
我之前做过这个方法,因为这是codewars.com上的一个问题
您有4个条件需要返回false.
Stack
)和顶部Character的Stack不(
}和顶部Character的Stack不{
]和顶部Character的Stack不[
public static boolean isValid(String s) {
System.out.println(s);
Stack<Character> st = new Stack<>();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
if (ch == '(' || ch == '{' || ch == '[') {
st.push(ch);
} else if (ch == ')' || ch == '}' || ch == ']') {
if (st.isEmpty()) {
return false;
}
char topChar = st.pop();
if (ch == ')' && topChar != '(') {
return false;
}
if (ch == '}' && topChar != '{') {
return false;
}
if (ch == ']' && topChar != '[') {
return false;
}
}
}
return st.isEmpty();
}
Run Code Online (Sandbox Code Playgroud)
运行
System.out.println(isValid("{}{lll}]"));
Run Code Online (Sandbox Code Playgroud)
产量:
{} {lll}]
false