当前位置: 首页 > 知识库问答 >
问题:

在java中查找括号字符串的有效性

公良俊楚
2023-03-14

事情是这样的:

您将得到一个字符串,其元素为括号()[]{}

任务是根据这些条件确定括号字符串是有效的还是无效的。

示例有效字符串:{}[]()

示例无效字符串:{[}]

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";
   }
    null

共有1个答案

蔺山
2023-03-14

您可以将字符串转换为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,),如果您想接受空字符串,请更改为。星号表示零个或多个-加号表示至少一个