1、判断字符串是不是回文子串
package com.homework.homework0725;
import java.util.Scanner;
/**
* @Author jinman1012@qq.com
* @Date 2020/7/25 14:09
* @Version 1.0
*function:判断字符串是不是回文子串
*/
public class Problem1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str1 = scanner.next();
char[] strChar = str1.toCharArray();
String str2 = swap(strChar);
//方法一
System.out.println(str1.equals(str2) ? "是回文串" : "不是回文串");
//方法二
System.out.println((str1.compareTo(str2) == 0) ? "是回文串" : "不是回文串");
}
public static String swap(char[] str) {
char strTemp;
System.out.println("交换前:"+ new String(str));
for (int i = 0; i < str.length / 2; i++) {
strTemp = str[i];
str[i] = str[str.length-1-i];
str[str.length-1-i] = strTemp;
}
System.out.println("交换后:"+new String(str));
return new String(str);
}
}
2、给定一个字符串 s,找到 s 中最长的回文子串。
package com.homework.homework0725;
import java.util.Scanner;
/**
* @Author jinman1012@qq.com
* @Date 2020/7/25 14:57
* @Version 1.0
* function:给定一个字符串 s,找到 s 中最长的回文子串。
*/
public class Problem2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
//输入的字符串转字符数组
char[] schar = s.toCharArray();
boolean[][] result = swap(schar);
//遍历二维数组
int temp = 0;
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
if(result[i][j] && (j-i > 1)) {
if(j-i > temp) {temp = j-i;}
System.out.println("起始位置:" + i + " 结束位置:" + j +"是回文字符串,长度为" + (j-i));
//去掉即可显示所有回文串
}
}
}
System.out.println("字符串最长回文串为:" + temp);
}
//截取字符串i与j之间的内容转成字符数组后传给judge方法判断是否是回文字符串
//judge返回的结果通过result二维数组保存
//我用的是穷举法 暴力法
//第1个与第1个(损耗的性能可忽略不计XD)、第2个.....第string.length-1个
//第2个与第2个(损耗的性能可忽略不计XD)、第3个.....第string.length-1个
public static boolean[][] swap(char[] schar) {
//二维数组用来保存判断结果
boolean[][] result = new boolean[schar.length][schar.length];
for (int i = 0; i < schar.length-1; i++) {
for (int j = i; j < schar.length; j++) {
int index = 0;
//创建临时字符数组并赋值,用来将schar i-j之间的内容传给judge
char[] charTemp = new char[j-i];
for (int k = i; k < j; k++) {
charTemp[index] = schar[k];
index++;
}
// System.out.println(new String(charTemp));
result[i][j] = judge(charTemp);
}
}
return result;
}
//判断回文字符串方法
//思路:前一半和后一半交换 进行equals判断
public static boolean judge(char[] str) {
String strCharTemp = new String(str);
char strTemp;
// System.out.println("交换前:"+ new String(str));
for (int i = 0; i < str.length / 2; i++) {
strTemp = str[i];
str[i] = str[str.length-1-i];
str[str.length-1-i] = strTemp;
}
// System.out.println("交换后:"+new String(str));
// System.out.println(strCharTemp.equals(new String(str)));
return strCharTemp.equals(new String(str));
}
}