找最长的对称的子串

这是一篇关于在给定字符串中找到最长对称子串的博客,举例说明了如何找出“abbaad”中的对称部分“abba”。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在牛客网刷到的题目,分享一下~嘻嘻~

给定一个字符串(数字或大小写字母), 找出最长的对称的子串(如有多个,输出任意一个)。

例如:

输入:“abbaad”

输出:“abba”

package dailytest;

import java.util.Scanner;

public class FindLonger {

	public static void main(String[] args) {

		String maxStr = "";// 最终的结果
		Scanner scanner = new Scanner(System.in);
		String str = scanner.nextLine();// 输入字符串

		if (str == null) {
			return;
		}

		if (str.length() <= 1) {
			maxStr = str; // 字符串长度为1
		}

		if (str.length() == 2) { // 字符串长度为2
			if (str.charAt(0) == str.charAt(1)) {
				maxStr = str;
			}

			else {
				maxStr = str.substring(1);
			}

		} else {// 字符串长度大于等于3时

			// 遍历数组,以每个字符为中心找对称字符串
			for (int i = 1; i < str.length() - 1; i++) {
				String strTemp;
				int left = i, right = i;
				if (str.charAt(i - 1) == str.charAt(i + 1)) {
					left = i - 1;
					right = i + 1;

				} else if (str.charAt(i - 1) == str.charAt(i)) {
					left = i - 1;
					right = i;
				} else if (str.charAt(i) == str.charAt(i + 1)) {
					left = i;
					right = i + 1;
				}
				strTemp = getStr(left, right, str);
				if (strTemp == null) {
					strTemp = str.substring(left, right + 1);
				}

				if (strTemp.length() > maxStr.length()) {
					maxStr = strTemp;
				}

			}
			System.out.println(maxStr);
		}
	}

	public static String getStr(int left, int right, String s) {
		int i = left, j = right;
		while (i >= 0 && j < s.length()) {
			if (s.charAt(i) == s.charAt(j)) {
				i--;
				j++;
			} else {
				return s.substring(i + 1, j);
			}
		}
		if (i < 0) {
			return s.substring(0, j);
		} else if (j >= s.length()) {
			return s.substring(i + 1, j);
		}
		return null;
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值