如何检查字符串是否包含 Java 中的右组括号
How to check if a String contains close group brackets in Java
如何检查字符串是否正确分组。例如,正确完成以下组:
({})
[[]()]
[{()}]
接下来做错了:
{(})
([]
[])
正确的字符串不能以错误的顺序关闭组,打开组但无法关闭它,或者在打开之前关闭组。
输入字符串可能包含任何符号“()”、“{}”或“[]”以创建组。如果字符串为空或以其他方式正确分组,则输出 return True
,如果分组不正确,则输出 False
。
谁能给我一些提示。
主要思想是使用 Stack
来跟踪预期的下一个对应括号。
以下代码将起作用:
public boolean isValid(String s) {
HashMap<Character, Character> closeBracketMap = new HashMap<Character, Character>();
closeBracketMap.put(')', '(');
closeBracketMap.put(']', '[');
closeBracketMap.put('}', '{');
HashSet<Character> openBracketSet = new HashSet<Character>(
closeBracketMap.values());
Stack<Character> stack = new Stack<Character>();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char cur = chars[i];
if (openBracketSet.contains(cur)) {
stack.push(cur);
} else { // close brackets
if (stack.isEmpty()) {
return false;
}
if (closeBracketMap.get(cur) != stack.peek()) {
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
我真的不想使用堆栈,在尝试了一些东西之后。这是我的解决方案。我认为这非常清楚和简单:
public class Groups{
public static boolean groupCheck(String s) {
int len;
do {
len = s.length();
s = s.replace("()", "");
s = s.replace("{}", "");
s = s.replace("[]", "");
} while (len != s.length());
return s.length() == 0;
}
}
这意味着我们将一个一个地删除括号。
例如:String s = "[]({[]()})"
(len = 10; s.length() = 10) 它将删除“[]”、“[]”、“()”。那么s = "({})" (s.length() = 4) 就会继续去掉"{}"。那么s = "()" (s.length() = 2),就会继续去掉"()"。然后 s = "" (s.length() = 0)。它会打破循环,因为 ( (len == 10) != (s.length() == 0) )。然后我们将能够检查它是真的。 :)
如何检查字符串是否正确分组。例如,正确完成以下组:
({})
[[]()]
[{()}]
接下来做错了:
{(})
([]
[])
正确的字符串不能以错误的顺序关闭组,打开组但无法关闭它,或者在打开之前关闭组。
输入字符串可能包含任何符号“()”、“{}”或“[]”以创建组。如果字符串为空或以其他方式正确分组,则输出 return True
,如果分组不正确,则输出 False
。
谁能给我一些提示。
主要思想是使用 Stack
来跟踪预期的下一个对应括号。
以下代码将起作用:
public boolean isValid(String s) {
HashMap<Character, Character> closeBracketMap = new HashMap<Character, Character>();
closeBracketMap.put(')', '(');
closeBracketMap.put(']', '[');
closeBracketMap.put('}', '{');
HashSet<Character> openBracketSet = new HashSet<Character>(
closeBracketMap.values());
Stack<Character> stack = new Stack<Character>();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char cur = chars[i];
if (openBracketSet.contains(cur)) {
stack.push(cur);
} else { // close brackets
if (stack.isEmpty()) {
return false;
}
if (closeBracketMap.get(cur) != stack.peek()) {
return false;
}
stack.pop();
}
}
return stack.isEmpty();
}
我真的不想使用堆栈,在尝试了一些东西之后。这是我的解决方案。我认为这非常清楚和简单:
public class Groups{
public static boolean groupCheck(String s) {
int len;
do {
len = s.length();
s = s.replace("()", "");
s = s.replace("{}", "");
s = s.replace("[]", "");
} while (len != s.length());
return s.length() == 0;
}
}
这意味着我们将一个一个地删除括号。
例如:String s = "[]({[]()})"
(len = 10; s.length() = 10) 它将删除“[]”、“[]”、“()”。那么s = "({})" (s.length() = 4) 就会继续去掉"{}"。那么s = "()" (s.length() = 2),就会继续去掉"()"。然后 s = "" (s.length() = 0)。它会打破循环,因为 ( (len == 10) != (s.length() == 0) )。然后我们将能够检查它是真的。 :)