Вопрос: Минимальное количество символов, необходимое для создания строкового палиндрома
Проблема: код работает нормально для тестовых случаев, но при отправке он говорит, что код не выполняется для больших тестовых случаев. Не уверен, почему это не работает.
Подход: разделение строки с середины на 0-й индекс с сохранением i-го символа в центре (например, String = ABBA, для i = 1: AB BA) или i-го символа слева (String = ABBA, для i = 1: AB BA) и проверка, если вся левая часть является палиндромом с частью правой части, если истинная оставшаяся часть правой части должна быть добавлена к левой части, что является нашим ответом.
Ответ: если входной сигнал - палиндромот 0-го до k-го индекса, возвращаемая длина-1-k
Обновление
Проблема заключается в том, сколько минимальных символов требуется добавить слева от строки, чтобы сделать еепалиндром. Более подробную информацию можно найти в ссылке на вопрос, которую я указал сверху.
Пример: String A = "mmtatbdzqsoemuvnpppsu";ответ 19 Причина: индекс 0 и индекс 1 - палиндром. от индекса 2 до 20 нет. так что если мы добавим символы от 2 до 20 слева от строки в обратном порядке, вся строка будет палиндромом.
Example2: String 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;
}
}