思路:
回文是指一个串和它的倒序串完全一样,例如“文言文”、“上海在海上”、“妈妈爱我,我爱妈妈”就是回文。那么我们首先定义一个方法,用于判断一个字符串是否是回文字符串,然后再定义一个变量用于更新长度。
具体实现:
a. 判断字符串是否为回文的方法:
public static boolean judge(String string) {//判断是否为字符串是否为回文
char temp[] = string.toCharArray();
int start=0,stop=string.length()-1;
while(start<stop) {
if(temp[start]!=temp[stop]) {
return false;
}
stop--;
start++;
}
return true;
}
b.然后就在主方法中,开始截取子字符串,判断是否为回文,如果是回文,则判断是否长度是否大于当前长度,如大于则更新长度:
Scanner scanner = new Scanner(System.in);
String flag = scanner.nextLine();
int max=1;
for(int i=0;i<flag.length()-1;i++) {
for(int j=i+1;j<=flag.length();j++) {//字符串后面会跟上一个‘\0’空字符,所以截取子字符串的时候,要使用等号
String temp = flag.substring(i, j);
//System.out.println(temp);
if(judge(temp)) {
if(max<temp.length()) {
max=temp.length();
}
}
}
}
System.out.println(max);
注意:这里存在一个问题,就是截取子字符串的时候,应该注意:
for(int j=i+1;j<=flag.length();j++) {//字符串后面会跟上一个‘\0’空字符,所以截取子字符串的时候,要使用等号
由于字符串的结束是以空字符结束的,上面的代码要取等号!
完整代码如下:
import java.util.Scanner;
public class Solution15 {//求最大回文子串,并且返回最大长度
public static boolean judge(String string) {//判断是否为字符串是否为回文
char temp[] = string.toCharArray();
int start=0,stop=string.length()-1;
while(start<stop) {
if(temp[start]!=temp[stop]) {
return false;
}
stop--;
start++;
}
return true;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String flag = scanner.nextLine();
int max=1;
for(int i=0;i<flag.length()-1;i++) {
for(int j=i+1;j<=flag.length();j++) {//字符串后面会跟上一个‘\0’空字符,所以截取子字符串的时候,要使用等号
String temp = flag.substring(i, j);
//System.out.println(temp);
if(judge(temp)) {
if(max<temp.length()) {
max=temp.length();
}
}
}
}
System.out.println(max);
// String str = "koko";
// if(judge(str)) {
// System.out.println(str+"是回文字符串~");
// }else {
// System.out.println(str+"不是回文~");
// }
}
}
扫描二维码关注公众号,回复:
2731662 查看本文章