为什么这在Java和字符串长度中起作用

为什么这在Java和字符串长度中起作用,java,string,comparison,Java,String,Comparison,我刚刚完成了家庭作业中的一个问题,目的是查找字符串中最长的回文,因此如果有一个字符串“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.

我刚刚完成了家庭作业中的一个问题,目的是查找字符串中最长的回文,因此如果有一个字符串“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;
for(int i=0;i
isPalindrome就是它所说的,如果子字符串是回文,则返回true或false。我的问题是。为什么我这样做

for(int j = i; j <= s.length(); j++)
for(int j=i;j不包括结束索引。

不包括结束索引

substring(i, j)
j(第二个参数)被认为位于该索引处字符的左侧

所以如果字符串是

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

returns "A", as it ends before the character in slot 1 (which doesn't exist)
j(第二个参数)被认为位于该索引处字符的左侧

所以如果字符串是

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

returns "A", as it ends before the character in slot 1 (which doesn't exist)

那是因为当你做一个

s.substring(i, j)
子串从i到j,不包括j,所以如果

i = 0 
j = 5 
然后,子字符串将包含5个字符(如u所说),但来自0-4个索引(即:0、1、2、3、4)


子字符串将包含index2-index5中的(j-i=6-2)4个字符(即:e2、3、4、5)

,这是因为在执行

s.substring(i, j)
子串从i到j,不包括j,所以如果

i = 0 
j = 5 
然后,子字符串将包含5个字符(如u所说),但来自0-4个索引(即:0、1、2、3、4)


子字符串将包含index2-index5(即:e2,3,4,5)中的(j-i=6-2)4个字符。

等等,我很困惑lol,你说它排除了结束索引是什么意思?等等,我很困惑lol,你说它排除了结束索引是什么意思?哦!现在我明白了:)谢谢你的澄清!哦现在我明白了:)谢谢你的澄清!