Java 对于较大的测试用例失败:使字符串回文化所需添加的最小字符数
问题: 问题:代码在测试用例中运行良好,但在提交时表示,对于较大的测试用例,代码失败。不知道为什么它不起作用 方法:通过将第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的门户。我想不出有哪个更大的测试用例我的代码失败了 请给我一些光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 更新 问题是需要在字符串左侧添加多少个最
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;
}
}
请描述你的代码在你的问题中应该做什么。提供一个失败的例子。告诉我们它产生了什么输出,以及期望得到什么。对我来说,代码通过了我能想到的所有测试用例,但它并没有在门户中提交说:你的代码可能会在更大的测试用例中失败