Почему это работает в Java и длина строки - PullRequest
0 голосов
/ 09 ноября 2011

Я только что закончил задание в своей домашней работе, цель которого - найти самый длинный палиндром внутри строки, поэтому, если у вас есть строка «hellomomomkk», то она вернет momom как самый длинный палиндром этой данной строки.

       for(int i = 0; i < s.length(); i++) {
        for(int j = i; j <= s.length(); j++) {
            if(isPalindrome(s.substring(i, j))) {
                if(s.substring(i, j).length() > longest.length()) {
                    longest = s.substring(i, j);
                }
            }
        }
    }
    return longest;

isPalindrome - это именно то, что он говорит, возвращает true или false, если подстрока является палиндромом. У меня вопрос такой. Почему, когда я делаю

for(int j = i; j <= s.length(); j++)

Мой код работает ?? но если я сделаю

for(int j = i; j < s.length(); j++)

Мой код не работает, и если бы строка была "Hello", j заканчивался бы на 5 , но фактическое количество символов равно 4, начиная с 0? так почему же в коде <= нет ошибки? И почему это работает? </p>

Ответы [ 3 ]

1 голос
/ 09 ноября 2011
substring(i, j)

j (второй аргумент) считается слева от символа с этим индексом.

Так что, если строка

"A"
"A".substring(0, 1);

returns "A", as it ends before the character in slot 1 (which doesn't exist)
1 голос
/ 09 ноября 2011

Это потому, что когда вы делаете

s.substring(i, j)

Подстрока от i до j, исключая j, так что если

i = 0 
j = 5 

, то подстрока будет содержать 5 символов (как вы сказали)но из 0-4 индексов (i: e 0, 1, 2, 3, 4)

like if i = 2 and j = 6 

подстрока будет содержать (j - i = 6-2) 4 символа из index2-index5 (i: e 2, 3,4, 5)

1 голос
/ 09 ноября 2011

s.substring() не включает индекс конца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...