Java 对于较大的测试用例失败:使字符串回文化所需添加的最小字符数

Java 对于较大的测试用例失败:使字符串回文化所需添加的最小字符数,java,string,algorithm,data-structures,Java,String,Algorithm,Data Structures,问题: 问题:代码在测试用例中运行良好,但在提交时表示,对于较大的测试用例,代码失败。不知道为什么它不起作用 方法:通过将第i个字符保持在中间(例如:string=ABBA,对于i=1:ABBA)或第i个字符保持在左边(string=ABBA,对于i=1:ABBA),将字符串从中间拆分为第0个索引,并检查整个左部分是否与右部分的部分是回文,右部分的真实剩余部分是否要添加到左部分,这就是我们的答案 答:如果输入是从第0到第k个索引的回文,则返回长度-1-k 更新 问题是需要在字符串左侧添加多少个最

问题:

问题:代码在测试用例中运行良好,但在提交时表示,对于较大的测试用例,代码失败。不知道为什么它不起作用

方法:通过将第i个字符保持在中间(例如:string=ABBA,对于i=1:ABBA)或第i个字符保持在左边(string=ABBA,对于i=1:ABBA),将字符串从中间拆分为第0个索引,并检查整个左部分是否与右部分的部分是回文,右部分的真实剩余部分是否要添加到左部分,这就是我们的答案

答:如果输入是从第0到第k个索引的回文,则返回长度-1-k

更新

问题是需要在字符串左侧添加多少个最小字符才能使其成为回文。更多详情请参见我在顶部提供的问题链接

示例:字符串A=“mmtatbdzqsoemuvnppsu”; 答案是19 原因:索引0和索引1是回文的。从索引2到20不适用。所以,若我们以相反的顺序将字符从2到20添加到字符串的左边,整个字符串将是回文的

示例2:字符串A=“mnnmpq” 若我们将pq以相反的顺序添加到字符串的左边,整个字符串将是回文的

我能想到的所有测试用例都通过了。但代码并没有在门户中提交,因为它可能无法获得更大的输出。它是一个类似leetcode的门户。我想不出有哪个更大的测试用例我的代码失败了

请给我一些光

public class Solution {
    public int solve(String A) {
        if(A==null || A.length()==0) return 0;
        int mid=(A.length()-1)/2;
        for(int i=mid; i>-1; i--) {
            if(i>0 && checkCenter(A,i)) return A.length()-1-2*i;
            if((i<mid || A.length()%2==0) && checkLeft(A,i)) return A.length()-1-(2*i+1);
        }
      return A.length()-1;
    }
    public boolean checkCenter(String A, int pos) {
        int start=pos-1;
        int end=pos+1;
        while(start>-1) {
            if(A.charAt(start)!=A.charAt(end)) return false;
            start--;
            end++;
        }
      return true;
    }
    public boolean checkLeft(String A, int pos) {
        int start=pos;
        int end=pos+1;
        while(start>-1) {
            if(A.charAt(start)!=A.charAt(end)) return false;
            start--;
            end++;
        }
      return true;
    }
}
公共类解决方案{
公共整数解算(字符串A){
如果(A==null | | A.length()==0)返回0;
int mid=(A.length()-1)/2;
对于(int i=mid;i>-1;i--){
如果(i>0&&checkCenter(A,i))返回A.length()-1-2*i;
如果((i-1){
如果(A.charAt(开始)!=A.charAt(结束))返回false;
开始--;
end++;
}
返回true;
}
公共布尔值左勾(字符串A,整数位置){
int start=pos;
int end=位置+1;
while(开始>-1){
如果(A.charAt(开始)!=A.charAt(结束))返回false;
开始--;
end++;
}
返回true;
}
}

请描述你的代码在你的问题中应该做什么。提供一个失败的例子。告诉我们它产生了什么输出,以及期望得到什么。对我来说,代码通过了我能想到的所有测试用例,但它并没有在门户中提交说:你的代码可能会在更大的测试用例中失败