5 .最长回文子串给你字符串s,在s中找到最长的回文子串。
示例1 :
输入: s=“babad”
输出:“bab”
解释:“aba”也是符合题意的回答。
示例2 :
输入: s=“cbbd”
输出:“bb”
示例3 :
输入: s=“a”
输出:“a”
示例4 :
输入: s=“交流”
输出:“a”
以各个点为中心点,从中心点向两侧展开寻找回文串。 如果回文列为奇数,则从最中心的一个节点向两侧展开;如果回文列为偶数,则从最中心的两个节点向两侧展开反复寻找最长回文列的方式1 class solution { publicstringlongestpalindrome } { strings }/is.length (; I ) ) /偶数列中间的两个节点为stringS1=extendHuiwen(s,I,i 1); //奇数列中间的节点为strings2=extendhuiwen(s,I,I ); //最长回文子串RES=RES.length(s1.length )? res:s1; res=res.length () s2.length )? res:s2; }返回RES; } publicstringextendhuiwen (strings,int l,int r ) while(L=0RS.length ) (if ) s.charat )=s.charat ) )。 r; }else{ break; }returns.substring(L1,r ); }方式2 class solution { publicstringlongestpalindrome (strings ) { String res=' '; int len=s.length (; for(intI=0; I(2*Len-1; I ) { int l=i/2; int r=i/2 i%2; 字符串=扩展(s,l,r ); res=res.length () curs.length )? res :curs; }返回RES; }publicstringextand(strings,int l,int r ) while(L=0RS.length ) ) if ) s.charat(L )==s.charat(r ) ) }else{ break; }returns.substring(L1,r ); } http://www.Sina.com/http://www.Sina.com /
647 .给回文子串一个字符串。 你的任务是计算这个字符串有多少个回文子串。
具有不同开始或结束位置的子列被视为不同的子列,即使它们由相同的字符组成。
示例1 :
输入: abc
输出: 3
三个回文字符串: “a”、“b”、“c”
示例2 :
输入: aaa
输出: 6
解说: 6个回文字符串: “a”、“a”、“a”、“aa”、“aa”、“aaa”
中心扩展类解决方案{ publicintcountsubstrings (strings ) { int n=s.length ); int res=0; //0~2N-2(2N-2 )/2为最后元素for ) intI=0; i2*n-1; I ) ) /以任一节点为中心节点向两侧扩展(/I为奇数时,实际为偶数个要素)//i/2 i%2相对于奇偶校验不同int l=i/2; int r=i/2 i%2; while(L=0RNS.Charat(L )==s.charAt(r ) r ) ) L----; r; res; } }返回RES; } http://www.Sina.com/http://www.Sina.com /