【发布时间】:2022-11-30 06:22:11
【问题描述】:
给定一个仅包含字符 '('、')'、'{'、'}'、'[' 和 ']' 的字符串 s,确定输入字符串是否有效。
如果满足以下条件,则输入字符串有效:
开括号必须由相同类型的括号闭合。 打开的括号必须以正确的顺序关闭。 每个闭括号都有一个对应的相同类型的开括号。
这是我的代码,它在我的 IDE 中运行良好,但是一旦我提交它,它就会给我 “第 40 行:错误:缺少返回语句 } ^"
class Solution {
public boolean isValid(String s) {
Stack <Character> stack = new Stack<Character>();
HashMap<Character, Character> openClose = new HashMap<Character, Character>();
openClose.put('(', ')');
openClose.put('{', '}');
openClose.put('[', ']');
if(s.length()==1) {
return false;
}
for(int i=0; i<s.length(); i++) {
if(stack.empty()==true && i<s.length()) {
if(s.charAt(i)==')'||s.charAt(i)=='}'||s.charAt(i)==']') {
return false;
}
stack.push(s.charAt(i));
}
if(s.charAt(i)==openClose.get(stack.peek())){
stack.pop();
}
else if (openClose.containsKey(s.charAt(i))){
stack.push(s.charAt(i));
}
else {
return false;
}
if(i>=s.length()-1) {
return true;
}
else return false;
}
}
}
我只是想让它编译。在 IDE 中它按预期编译和运行,但是一旦我提交它,它就会返回一个错误。
【问题讨论】:
-
您缺少
s为空时的返回语句。 -
因为您缺少返回语句。您的 for 循环可能永远不会进入。那应该返回什么?我强烈建议您为您的方法遵循一个入口点和一个出口点(而不是多个 return 语句)。
-
if (i >= s.length() - 1) return true; else return false;可以简化为return i >= s.length() - 1;,后者又可以简化为return false;,因为s.length()至少为2。 -
楼主,请注意这个或类似的问题已经在这个网站上被问过很多次了,为了你和我们的利益,你会想学习如何用谷歌搜索这个网站,然后在提问之前先搜索。例如:site:stackoverflow.com java missing return if for while
标签: java