class Solution { int len; int start; public String longestPalindrome(String s) { if(s.length()<2)return s; len=1; start=0; for(int i=0;i<s.length()-1;++i) { verify(s,i,i); verify(s,i,i+1); } return s.substring(start,start+len); } void verify(String s, int i,int j) { while(i>=0&&j<s.length()&&s.charAt(i)==s.charAt(j)) { --i; ++j; } ++i; //上面的循环跳出时,ij的值已经变成非法了,所以要做还原,当然为了省事也可以在下面的代码直接计算,但是有点难以理解 --j; int curlen=j-i+1; //如果上面两行不要这里就是 j-1 -i-1 +1 = j-i-1 if(curlen>len) { len=curlen; start=i; //同理如果上面两行没有就是i-1 } } }
直接暴力查找,比较好理解;