普通回文
算法要求:
编写一个程序,判断一个字符串是否为“回文”。回文串:字符串字符从前往后与从后往前一致(中心对称)。
算法思路:
首先将字符串等分左右两块,然后依次对称比较每一对字符是否相同
代码实现:
import java.util.Scanner;
public class Palindrome {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (!sc.hasNext("###")) {
String data = sc.next();
if (isPalin(data)) {
System.out.println("yes");
} else {
System.out.println("no");
}
}
sc.close();
}
public static boolean isPalin(String data) {
int len = data.length();
for (int i = 0; i < len/2; i++) {
if (data.charAt(i) != data.charAt(len-1-i)) {
return false;
}
}
return true;
}
}
测试样例:
abc
no
qwq
yes
abcdcba
yes
复杂回文
算法要求:
编写一个程序,找出一个字符串中最长的“回文”,字符串只包含大小写字母。回文串:字符串字符从前往后与从后往前一致(中心对称)。
算法思路:
先把字符串拆分成所有可能的组合,从最简单的两个字符到最长字符组合(回文必须字符串的长度大于等于2)。然后再判断哪些字符串符合回文要求,放进一个集合中。最后取出字符串最长的一个或者多个。
代码实现:
package test;
import java.util.*;
import java.util.stream.Collectors;
public class Test11 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String tmp = scanner.nextLine();
scanner.close();
List<String> list = new ArrayList<>();
int ln = tmp.length();
for (int i = 0; i < ln; i ++) {
for (int j = 1; j <= ln; j ++) {
if (i+1 < j) {
String tl = tmp.substring(i, j);
boolean log = Test11.test(tl);
if (log)
list.add(tl);
}
}
}
//按长度排序
List<String> stringList = list.stream().sorted(Comparator.comparing(String::length)).collect(Collectors.toList());
String max = stringList.get(stringList.size()-1);
List<String> result = stringList.stream().filter(x->x.length()==max.length()).collect(Collectors.toList());
System.out.println(result);
}
public static boolean test(String str) {
int len = str.length();
for (int m = 0; m < len/2; m ++) {
if (str.charAt(m) != str.charAt(len-1-m))
return false;
}
return true;
}
}
测试结果:
OK,以上就是鄙人小小总结,有何不妥请多多指正评论!!!