1.输入一个字符串,并返回其中最长回文子串的长度

思路:

回文是指一个串和它的倒序串完全一样,例如“文言文”、“上海在海上”、“妈妈爱我,我爱妈妈”就是回文。那么我们首先定义一个方法,用于判断一个字符串是否是回文字符串,然后再定义一个变量用于更新长度。

具体实现:

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 查看本文章

猜你喜欢

转载自blog.csdn.net/qq_38442065/article/details/80470462