文字列の中で最も長い回文を見つける簡単なプログラムを書いています。私がやっていることは、各部分文字列が回文であるかどうかを調べて、長さを調べることです。長さが前の長さよりも長い場合、私は新しい最長の部分文字列を持っています。たとえば、 "babad"は "bab"または "aba"を返しますが、いずれも問題ありません。しかし、私の問題は、私が部分文字列呼び出しのインデックスを外れてしまったことです。理由を理解できません。部分文字列の範囲外
public class LongestPal{
public static void main(String[] args)
{
String test = new String("babad");
String result = longestPalindrome(test);
}
public static String longestPalindrome(String s) {
int length = 0;
String answer = new String();
for(int i = 0;i<=s.length();i++)
{
for(int j = 0; j<= s.length();j++)
{
String subStr = s.substring(i,j); // Get all substrings
System.out.println(subStr); // Checking to see if all are printed
boolean result = isPalindrome(subStr); //Check for palindrome
if(result)
{
if(length < subStr.length()) //If length of new substr is greater than the old one,
//the new answer will be longer substring
{
answer = subStr;
}
}
}
}
return answer;
}
public static boolean isPalindrome(String s) //Recursive palindrome checker
{
if(s.length() == 0 || s.length() == 1)
return true;
if(s.charAt(0) == s.charAt(s.length()-1))
return isPalindrome(s.substring(1, s.length()-1));
return false;
}
}
私が印刷すると、エラーが発生した後に "babbad"が表示されるまで、すべての部分文字列の組み合わせが取得されます。
* "たとえば、" babbad "は" bab "または" aba "を返します。" * ... aba? – Tom
@Tom多分OP OPABBを言いたいと思っていたでしょうか? – rafid059
'j Jyr