事情是这样的:
您将得到一个字符串,其元素为括号()[]{}
。
任务是根据这些条件确定括号字符串是有效的还是无效的。
示例有效字符串:{}[]()
示例无效字符串:{[}]
static String braces(String string) {
Stack<String> stack = new Stack<>();
for(int i = 0; i <= string.length() - 1; i ++){
if(string.substring(i, i+1).equals("("))
stack.push((string.substring(i, i+1)));
else if(string.substring(i, i+1).equals("["))
stack.push((string.substring(i, i+1)));
else if(string.substring(i, i+1).equals("{"))
stack.push((string.substring(i, i+1)));
else if(string.substring(i, i+1).equals(")"))
if(stack.peek().equals("("))
stack.pop();
else
return "NO";
else if(string.substring(i, i+1).equals("]"))
if(stack.peek().equals("["))
stack.pop();
else
return "NO";
else if(string.substring(i, i+1).equals("}"))
if(stack.peek().equals("{"))
stack.pop();
else
return "NO";
}
return "YES";
}
您可以将字符串转换为char[]
并对其进行迭代。此外,您还可以通过使用一个映射
来使代码看起来更优雅:
// Initialize some helper structures:
private static Map<Character, Character> CLOSE_TO_OPEN;
private static Set<Character> OPENERS;
static {
CLOSE_TO_OPEN = new HashMap<>();
CLOSE_TO_OPEN.put(')', '(');
CLOSE_TO_OPEN.put(']', '[');
CLOSE_TO_OPEN.put('}', '{');
OPENERS = new HashSet<>(closeToOpen.values());
}
public static boolean braces (String str) {
Stack<Character> stack = new Stack<>();
for (Character c : str.toCharArray()) {
// If it's an opening bracket, push it to the stack
if (OPENERS.contains(c)) {
stack.push(c);
}
// If it's a closing bracket, check the last opener
else if (CLOSE_TO_OPEN.containsKey(c)) {
try {
Character opener = stack.pop();
// Handle mismatches brackets
if (!CLOSE_TO_OPEN.get(c).equals(opener)) {
return false;
}
}
// If the stack is empty, there's a redundant closer
catch (EmptyStackException ignore) {
return false;
}
}
}
// If the stack isn't empty once we're done with the string,
// there are redundant openers
if (!stack.empty) {
return false
}
return true;
}
假设一个字符串的格式如下: 我想提取: 什么正则表达式可以用于这样的提取? 我被这个困住了:
我有一个字符串“1,3,5,7,9,11,12,14”,我想检查该字符串在java中是否包含“12,3,14”。 我的代码:
问题内容: 在java中查找字符串的所有排列 问题答案: 在这篇文章中,我们将看到如何在 java 中找到 String 的所有排列。 我们将使用一种非常简单的方法来做到这一点。 取出String的第一个字符,递归地插入剩余String的排列的不同位置。 假设您将 String 作为ABC。 所以我们从 ABC 中取出 A 第一个字符 =A 和 RemainingString = BC 因为我们在
问题内容: 我正在尝试查找Java字符串中所有出现的子字符串。 例如:在“ ababsdfasdfhelloasdf”中搜索“ asdf”将返回[8,17],因为有2个“ asdf”,一个在位置8,另一个在17。在“ aaaaaa”中搜索“ aa”将返回[0, 1,2,3,4],因为位置0、1、2、3和4处有一个“ aa”。 我尝试了这个: 可以在Python中解决此问题,如下所示: 其中“ wo
问题内容: PHP字符串文字中的(花括号)是什么意思? 问题答案: 这是字符串插值的复杂(弯曲)语法。从手册中: 复杂(卷曲)语法 之所以称其为“复杂”,是因为语法复杂,而是因为它允许使用复杂的表达式。 可以通过此语法包括具有字符串表示形式的任何标量变量,数组元素或对象属性。只需以与出现在字符串外部相同的方式编写表达式,然后将其包装在和中即可。由于无法转义,因此仅在紧随其后的才会识别此语法。使用
问题内容: 使用正则表达式的python中的代码可以执行类似这样的操作 谢谢 问题答案: 这是您需要做的所有事情: 正如叶立昂指出:(我几乎引用) 是的“非贪婪”版本。它使正则表达式匹配的字符数最少,而不是最多。贪婪的版本会给出字符串;非贪婪版本‘String 1,String 2,String3’ 另外(再次使用Johan,),如果您想接受空字符串,请更改为。星号表示零个或多个-加号表示至少一个