-2

だから私は Java を学ぼうとしているのですが、課題で行き詰っています。この割り当てでは、弦のバランスが取れているかどうかに似た、奇妙なひねりを加えたものが求められます。すべての開き括弧が閉じ括弧の前にある場合にのみ true を返すことができます。

真実:

((()))

(())

()

間違い:

()()

(())()

私はすでに通常の「バランスが取れているかどうかをチェックする」ようにコーディングしましたが、この小さなひねりを加える方法がわかりません。私は本当に基本的なことしか理解していないので、配列などのことをよく理解していません。助けていただければ幸いです。

4

3 に答える 3

0

おそらく最良の解決策ではありませんが、提供した例から、これは機能します

   String pattern = "((((()))))";
   char matcher = '(';
   int count = 0;

   for (char c : pattern.toCharArray()) {
       if (c == matcher) count++;
   }


   for (int i = 0; i < pattern.length(); i++) {
       if (pattern.charAt(i) == ')' && i < count) {
           System.out.println("UNBALANCED");
       }
   }

これは、あなたが述べたひねりのためだけです。おそらく、このようなものには正規表現を使用したいと思うでしょう。

于 2016-01-19T01:38:28.593 に答える
0

Javaのパターンマッチングが使える!

String test1 = "((()))";
String test2 = "()";
System.out.println(test1.matches("\\(+\\)+")); // Should Return True
System.out.println(test2.matches("\\(+\\)+")); // Should Return True

String test3 = "()()";
String test4 = "(())()";
System.out.println(test3.matches("\\(+\\)+")); // Should Return False
System.out.println(test4.matches("\\(+\\)+")); // Should Return False

正規表現「\(+\)+」について説明します。最初に、「\(+」を使用して開いていることを検出する必要があります。+ は 1 つ以上を意味します。次に、「\)+」を使用して閉じていることを検出する必要があります。\ を使用している理由は、エスケープ ( and ) が必要なためです。これらは Java パターンの構成要素であり、文字列内の通常の文字にしたいだけです。

于 2016-01-19T01:39:08.720 に答える