复杂回文Java代码实现

普通回文
算法要求:
编写一个程序,判断一个字符串是否为“回文”。回文串:字符串字符从前往后与从后往前一致(中心对称)。
算法思路:
首先将字符串等分左右两块,然后依次对称比较每一对字符是否相同
代码实现:

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,以上就是鄙人小小总结,有何不妥请多多指正评论!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值