我试图找到子串中所有可能的回文。我创建了一个palindrome
方法,但由于某种原因,我的代码超出了界限而不是在最后一个字母后停止。
public static boolean palindrome(String input){
int i = input.length();
int k;
char[] palindrome_arr = new char[i];
char[] palindrome_arr1 = new char[i];
boolean result;
palindrome_arr = input.toCharArray();
for(k = 0; k<(i);k++)
{
// System.out.println(palindrome_arr[k]);
palindrome_arr1[k]=palindrome_arr[(palindrome_arr.length-1)-k];
//System.out.println(palindrome_arr1[k]);
// System.out.println(palindrome_arr[(palindrome_arr.length-1)-k]);
}
result = Arrays.equals(palindrome_arr, palindrome_arr1);//checks if its a //palindrome
if (result==true)
{
return true;
}
else
return false;
}
for (String sub11 : sub1) {
System.out.println(sub11);
String sub2;
sub2 = sub11;
for (int q = 0; q < sub2.length()-1; q++)
{
sub = sub2.substring(q, sub2.length()-q);
// System.out.println(sub);
If(sub.length() > 1){
if(palindrome(sub) == true){
System.out.println(sub);
counter++;
hm.put(counter, sub);
}
}
}
答案 0 :(得分:-1)
您的错误就在这里。
sub = sub2.substring(q, sub2.length()-q);
例如,sub2.length为5.在第4次迭代时,q为3,(sub2.length-q)为2,方法中的值为sub2.substring(3,2); < / p>
第一个值不应大于第二个值,如果大于第二个值,则它将通过“超出范围”例外。
我给了你一个基本的想法,现在改变这个代码就可以了。