格式正确和格式不正确的字符串的示例是:
1. “A3{DJE(DG[FF]K)WA65}” - well formed
2. “BBB[BM98{WJHG]333}” - Not well formed
3. “CBY(DDD(WKLP)BEHOP” - Not well formed
支持的括号为{},[]和()
这是我正在尝试做的事情,由于某种原因,它总是返回false。
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
public class WellFormedStringCheck {
public static boolean isWellFormed(String input){
if(input == null) return true;
Stack<Character> stack = new Stack<>();
Map<Character,Character> map = new HashMap<Character,Character>();
map.put('{', '}');
map.put('(', ')');
map.put('[', ']');
for(int i = 0 ; i < input.length(); i++){
char s = input.charAt(i);
if(s == '[' || s == '{' || s == '(' )
stack.push(s);
if(s == ']' || s == '}' || s == ')'){
if(stack.isEmpty()) return false;
if(map.get(s) != stack.pop()); return false;
}
}
if(!stack.isEmpty()) return false;
return true;
}
public static void main(String[] args) {
System.out.println(isWellFormed("A3{DJE(DG[FF]K)WA65}"));
}
}
有人可以告诉我上述方法有什么问题吗?
你犯了一个愚蠢的错误,而你建立你的参考地图括号,括号,括号和倒退。这是您最初构建地图的方式:
map.put('{', '}');
map.put('(', ')');
map.put('[', ']');
但你仰视关闭括号,括号,括号和在地图中,当钥匙实际上不是开放字符。这正在返回null
并使您的方法返回false
。
这是您的方法的完整代码:
public static boolean isWellFormed(String input) {
if (input == null) return true;
Stack<Character> stack = new Stack<Character>();
Map<Character,Character> map = new HashMap<Character,Character>();
map.put('}', '{');
map.put(')', '(');
map.put(']', '[');
for (int i=0; i < input.length(); i++) {
char s = input.charAt(i);
if (s == '[' || s == '{' || s == '(') {
stack.push(s);
}
if (s == ']' || s == '}' || s == ')') {
if (map.get(s) != stack.pop()) {
return false;
}
}
}
if (!stack.isEmpty()) {
return false;
}
else {
return true;
}
}
我用IntelliJ中的此更改测试了您的代码,它似乎没有任何问题地运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句