java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度



public class LongestSymmtricalLength {

/*
* Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
* 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
*/

public static void main(String[] args) {
String[] strs={
"google",
"elgoog",
"agollloge",
"aba",
"aaaaaa",
};
for(String each:strs){
int len=longestSymmtricalLength(each);
System.out.println(len);
}
}

/*
* consider this string:
* ..aAa..(A represents a string of any length)
* if we already know 'A' is a palindrome,
* we just need to test if the char before 'A' and that after 'A' are the same
* if so,A=aAa now.
* Do it again and again to find the result.
*/
public static int longestSymmtricalLength(String str){
if(str==null||str.length()==0){
return -1;
}
int symLen=1;
char[] letter=str.toCharArray();
int strLen=str.length();
int curIndex=1;
while(curIndex>0&&curIndex<strLen-1){
//odd symmetrical length,the 'pivot' char is letter[curIndex]
int i=curIndex-1;
int j=curIndex+1;
while(i>=0&&j<=(strLen-1)&&letter[i]==letter[j]){
i--;
j++;
}
int newLen=j-i-1;
if(newLen>symLen){
symLen=newLen;
}
//even symmetrical length,the 'pivot' chars are letter[curIndex] and letter[curIndex+1]
i=curIndex;
j=curIndex+1;
while(i>=0&&j<=(strLen-1)&&letter[i]==letter[j]){
i--;
j++;
}
newLen=j-i-1;
if(newLen>symLen){
symLen=newLen;
}
curIndex++;
}
return symLen;
}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值