给出一串单独的括号,括号等,如果配对正确,我试图返回true。 (有一些类似的问题,但它们涉及更复杂的东西,如数组,字符串中的其他字符等)
这是我的代码,当我输入"()"
时,它返回false.6
任何帮助或建议都将不胜感激!
答案 0 :(得分:2)
您可以使用stack来解决此问题。
假设您开始循环遍历字符串中的字符,并且您有一个堆栈......
如果您将相应的关闭括号显示在堆叠的开口支架上,然后从堆栈中弹出支架 - 您应该在检查字符串的末尾有一个空堆栈。
如果在字符串循环结束时堆栈为空,则所有括号都将配对。
如果堆栈为空并且还有更多要检查的字符(即循环未完成),则括号不会配对。
如果找到一个右括号然后从堆栈中弹出并且找不到相应的左括号,这也意味着括号未正确配对。在这种情况下,您可以使用以下代码:
private static boolean match(char fromStack, char next) {
return fromStack == '[' && next == ']' || fromStack == '{' && next == '}' || fromStack == '(' && next == ')';
}
答案 1 :(得分:0)
现在你只是想确保连续2个字符不相同,但是")("和#34;(}"满足这个条件,不是@ luk2302注释,你应该迭代字符串中的每2个字符。所以你应该使用i++
而不是在你的for循环中使用i+=2
。
但我认为另一种方法是使用正则表达式:
public boolean isValid(String s) {
// if null, or its length is zero or odd then is automatically invalid
if (s == null || s.length() == 0 || s.length() % 2 != 0) {
return false;
}
return s.matches("(\\(\\)|\\{\\}|\\[\\])+");
}
此正则表达式将匹配"()"," {}"和" []" 1次或更多次。
以下是一些测试输出:
()有效:true
)(有效:false
(}有效:false
()()有效:true
()(有效:false
(){} []有效: 真