Ошибка строки вне строки с четной длиной строки - PullRequest
0 голосов
/ 11 февраля 2019

Я написал свою версию метода, которая проверяет, является ли слово палиндромом или нет.Кажется, что он хорошо работает со строками с нечетной длиной, но возникает ошибка Исключение String Out of Bound при тестировании с четной длиной.

Любая помощь приветствуется!

public static boolean palindrome(String s, int start, int end) {

int length = s.length();


        if (length%2 != 0 && start != end) {
            if (s.charAt(start) == s.charAt(end)) {
                return palindrome(s,start+1,end-1);
            }
            else {
                return false;
            }
        }
        else if(length%2 == 0 && (start+1) != (end-1)) {
            if (s.charAt(start) == s.charAt(end)) {
                return palindrome(s,start+1,end-1);
            }
            else {
                return false;
            }
        }
        else if(length%2 != 0 && start == end) {
            return true;
        }
        else if(length%2 == 0 && start+1 == end-1) {
            if (s.charAt(start+1) == s.charAt(end-1)) {
                return true;
            }
            else {
                return false;
            }
        }
        else {
            return false;
        }

    }

1 Ответ

0 голосов
/ 11 февраля 2019

Я думаю, что ваш код немного излишне сложен, вы используете индексы, чтобы делать то, что вы можете делать с подстрокой в ​​Java.Кроме того, у вас есть много случаев для четных или нечетных чисел, которых вы могли бы избежать, просто рассматривая их в базовом случае.Я постарался сохранить ваш подход и максимально сократить код.Я думаю, что намного чище.В базовом случае, если число нечетное, оно заканчивается на 1, а если оно четное, оно заканчивается на 2.

public boolean isPalindrome(String string)
{
    if (string.length() > 2) {
        if (string.charAt(0) == string.charAt(string.length() - 1)) {
            return this.isPalindrome(string.substring(1, string.length() - 1));
        } else {
            return false;
        }
    } else if (string.length() == 1) {
        return true;
    } else {
        if (string.charAt(0) == string.charAt(1)) {
            return true;
        } else {
            return false;
        }
    }
}
...