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

如何检查字符串是否包含Java中的关闭组括号

应俭
2023-03-14

如何检查字符串是否正确分组。例如,以下组是正确完成的:

({})
[[]()]
[{()}]

接下来的操作不正确:

{(})
([]
[])

正确的字符串不能以错误的顺序关闭组、打开组但无法关闭组或在打开组之前关闭组。

可能包含任何符号 "()" "{}" 或“[]”以创建组的输入字符串。如果字符串为空或以其他方式正确分组,则输出返回True,如果分组不正确,则返回False

有人能给我一些提示吗?

共有2个答案

洪高刚
2023-03-14

我真的不想使用堆栈,在尝试了一些东西之后。这是我的解决方案。我认为这是非常清晰和简单的:

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

这意味着我们将逐个移除支架。

例如:<code>字符串s=“[]({[]()})”(len=10;s.length()=10)它将删除“[]、“[]、”()”。然后s=“({})”(s.length()=4)它将继续删除“{}”。然后s=“()”(s.length()=2),它将继续删除“()”。则s=(s.length()=0)。它将打破循环,因为((len==10)!=(s.length()==0))。然后我们将能够检查它是否正确

充星腾
2023-03-14

主要思想是使用堆栈来跟踪预期的下一个相应括号。以下代码将起作用:

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();
}
 类似资料:
  • 问题内容: 我想检查我的字符串是否包含+字符。我尝试了以下代码 但是它没有给出预期的结果。 问题答案: 您需要此: 类的方法不使用正则表达式作为参数,而是使用普通文本。 编辑: 输出:

  • 问题内容: 如何检查字符串是否包含\ n或换行符? 问题答案: 如果字符串是在同一程序中构造的,则建议使用以下命令: 但是,如果您指定使用\ n,则此驱动程序说明了如何做: 导致 回应您的评论: 结果是

  • 问题内容: 我需要检查字符串是否包含数字。任何数字。字符串是否为数字,而不是数字,但包含一个数字。 例子: ‘test’=没有数字。 ‘test2’=包含数字。 问题答案: 使用正则表达式: 不使用正则表达式:

  • 问题内容: 我正在编写一个程序,其中用户以以下格式输入字符串: 我需要检查字符串中是否有数字 然后只提取数字。 如果我使用或,则无论输入的内容是什么,程序都无法在字符串中找到数字,但是仅在只有数字的情况下才能使用。 我可以使用什么作为查找和提取的解决方案? 问题答案: 我使用的解决方案如下所示: 我确信这不是一个完美的解决方案,但它满足了我的需求。谢谢大家的帮助。:)

  • 问题内容: 我正在尝试检测字符串是否包含至少一个存储在数组中的URL。 这是我的数组: 该字符串由用户输入并通过PHP提交。在确认页面上,我想检查输入的URL是否在数组中。 我尝试了以下方法: 无论输入什么,返回值始终为“找不到匹配项”。 这是正确的做事方式吗? 问题答案: 尝试这个。 如果要检查不区分大小写,请使用stristr()或stripos()。

  • 问题内容: 在Java forString类中,有一个称为matchs的方法,该方法如何使用正则表达式检查我的字符串是否只有数字。我尝试了以下示例,但它们均使我返回了false。 问题答案: 尝试 要么 按照Java 正则表达式 ,其 含义是“一次或多次”,并且其含义是“数字”。 注意:“双反斜杠”是一个 转义序列, 用于获取单个反斜杠-因此,在Java字符串中会提供实际结果: 参考文献: Jav