2

文字列が回文であるかどうかを再帰的に判別するプログラムを書いています。正規表現を使用することにしましたが、構文を理解するのに少し問題があります。私がする必要があるのは、最初と最後の文字を比較して、それらが同一であるかどうかを確認することです。どうすればこれを行うことができますか?

ありがとう!

編集:私はこれが役に立ちました:Degvikの質問に対するAirSourceLtdの回答

4

2 に答える 2

3

はい、最初と最後の文字が同じであるかどうかを正規表現を使用して判断できます。

str.matches("(.).*\\1")

これは、「バックリファレンス」を使用して、最初の文字をキャプチャする「グループ1」を参照します。

例:

"aba".matches("(.).*\\1") // true
"abc".matches("(.).*\\1") // false

次に、最初と最後の文字を再帰的に削除して、もう一度確認します。

public static boolean isPalindrome(String str) {
    return str.length() < 2 || 
        (str.matches("(.).*\\1") && isPalindrome(str.substring(1, str.length() - 1)));
}
于 2012-09-19T01:03:56.317 に答える
3

ここで再帰的に作業する場合は正規表現を使用する必要はありません。また、一般的に回文をテストする場合は正規表現を使用する必要はありません(可能な場合でも)。あなたはこのようなことを試すことができます:

public static boolean isPalindrome(String s) {
    if (s.length() < 2) return true;
    return s.charAt(0) == s.charAt(s.length() - 1) && isPalindrome(s.substring(1, s.length() - 1));
}
于 2012-09-19T00:31:19.537 に答える