Не подходит для больших тестовых случаев: требуется минимальное количество символов для создания String Palindromic - PullRequest
0 голосов
/ 24 октября 2019

Вопрос: Минимальное количество символов, необходимое для создания строкового палиндрома

Проблема: код работает нормально для тестовых случаев, но при отправке он говорит, что код не выполняется для больших тестовых случаев. Не уверен, почему это не работает.

Подход: разделение строки с середины на 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...