Java实现实现简单算法之最长对称字符串

2023-10-30

        题目:已知一字符串,求其内包含的最长对称字符串,例:已知字符串:google,输出最长对称字符串:goog,已知abada,输出aba,已知sdghjdgzzgdah,输出:dgzzgd。

        看到题目时,大家第一反应都是模棱两可的,好像可以这样干,好像又不知道从哪里下手,这些都是正常的,那接下来小编带大家将问题分解,逐步实现。

        1、判断字符串是否对称

        2、获取字符串所有的对称子串

        3、获取最长的对称子串

        如上述,拆解之后,自然就顺利多了

        那接下来我们就看看到底怎么来实现每一步:

        首先判断字符串是否对称,假如字符串长度维为n,我们只需要判断第0位和第n-1位是否相同,接下来继续判断第1位和n-2位是否相同,也就是循环判断第i位和第n-i-1位是否相等,一直到i>=n-i-1这个条件满足为止。

    /**
     * 判断字符串是否对称
     * @param str
     * @return
     */
    private static boolean check(String str) {
        if (str == null || str.length() <= 1) {
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
                return false;
            }
        }
        return true;
    }

接下来我们看看完整代码:

import java.util.ArrayList;
import java.util.List;

/**
 * 找出最长对称字符串
 *
 * @author tobiasy
 */
public class MaxSymmetric {
    public static void main(String[] args) {
        // TODO 输出最长对称字符串:goog
        String input1 = "google";
        // TODO 输出最长对称字符串:aba
        String input2 = "abada";
        // TODO 输出2个最长对称字符串:pop/upu
        String input3 = "pop-upu";

        start("sdghjdgzzgdah");
    }

    /**
     * 启动方法
     * @param str
     */
    private static void start(String str) {
        List<String> list = maxSubSymmetric(str);
        if (list.isEmpty()) {
            System.err.println("没有找到对称字串!");
        }
        list.forEach(System.out::println);
    }

    /**
     *  获取字符串中最长的对称字串
     * @param str
     * @return
     */
    private static List<String> maxSubSymmetric(String str) {
        List<String> result = new ArrayList<>();
        List<String> list = allSubSymmetric(str);
        Integer length = 0;
        for (String s : list) {
            if (s.length() > length) {
                length = s.length();
            }
        }
        for (String s : list) {
            if (s.length() <= length) {
                result.add(s);
            }
        }
        return result;
    }

    /**
     * 获取所有的对称字串
     * @param str
     * @return
     */
    private static List<String> allSubSymmetric(String str) {
        List<String> list = new ArrayList<>();
        for (int i = 0; i <= str.length(); i++) {
            for (int j = i; j <= str.length(); j++) {
                String sub = str.substring(i, j);
                if (check(sub)) {
                    list.add(sub);
                }
            }
        }
        return list;
    }

    /**
     * 判断字符串是否对称
     * @param str
     * @return
     */
    private static boolean check(String str) {
        if (str == null || str.length() <= 1) {
            return false;
        }
        for (int i = 0; i < str.length(); i++) {
            if (str.charAt(i) != str.charAt(str.length() - i - 1)) {
                return false;
            }
        }
        return true;
    }

        快去发给你心仪的那个TA吧

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java实现实现简单算法之最长对称字符串 的相关文章

随机推荐

  • 沁恒CH32V307使用记录:SPI基础使用

    文章目录 目的 基础说明 使用演示 其它补充 总结 目的 SPI是单片机中比较常用的一个功能 这篇文章将对CH32V307中相关内容进行说明 本文使用沁恒官方的开发板 CH32V307 EVT R1沁恒RISC V模块MCU赤兔评估板 进行
  • 使用Qt/C++实现WGS84、高德GCJ-02、百度BD-09坐标系间相互转化

    在做地图相关开发时候 绕不开不同坐标系间的转化 因此我根据查阅相关资料后将不同坐标系间的转换封装到一个GeoTranslate类中 该类转换函数不仅支持Qt C 调用 同时可在QML中直接调用 配合上QML Map很方便 我将该类做了个De
  • certificate_unknown 未知证书,后端配置了本地生成的证书,vue访问时ERR_CERT_AUTHORITY_INVALID

    解决办法 将ip接口地址复制到浏览器地址栏访问一下就出现以下界面 点继续访问 之后vue访问就访问的通了 每次浏览器历史数据被清除 都需要重新进行此操作 否则就会被拦截 这个是被浏览器拦截的 主要是证书的问题 不是前端或者后端的问题
  • SPSS学习(1)之数据录入与数据获取

    SPSS系列文章是本人根据张文彤的 SPSS20 0统计分析基础教程第2版 学习SPSS中学习笔记 仅作参考和学习 在SPSS中建立数据文件大致有两种情况 一种是非电子化的原始数据资料 需要直接将调查问卷中的数据录入SPSS软件 建立数据文
  • 【Python】用Python来创建7种不同的文件格式

    今天的这篇文章呢 小编来介绍一下如何通过Python来创建各种形式的文件 这里包括了 文本文件 CSV文件 Excel文件 压缩文件 XML文件 JSON文件 PDF文件 创建文本文件 文本文件本质上是以 txt后缀结尾的文件 在Pytho
  • 自学网络安全(黑客)两个月都没入门?

    最近我经常会看到这一类的问题 学习XXX知识没效果 学习XXX技能没方向 学习XXX没办法入门 给你一个忠告 如果你完全没有基础的话 前期最好不要盲目去找资料学习 因为大部分人把资料收集好之后 基本上都是放在收藏夹吃灰 同时资料收集的多了
  • C51_PID 水温控制系统

    前言 通过C语言程序写入51单片机实现水的温度的采集 并通过控制器控制加热器给水体加热 对水体的温进行PID控制 保证温度在设定值范围内波动 最终包括C51的视频的内容以及部分参考资料都可以在 百度分享链接内下载 链接 https pan
  • STM32中文参考手册下载地址

    STM32中文参考手册下载地址 进入官网后点击 设计资源 选择你要下载的芯片的手册 然后找到有 完整的存储器和外设信息 字眼的文档进行下载 很多人下载的下面这种 这种只介绍电气性能和简单介绍外设资源 并不告诉你寄存器啥的 编程比较困难 vo
  • 电脑键盘指法的正确练习步骤

    电脑键盘指法的正确练习步骤 转载 http www jb51 net softjc 39858 html 如果您觉得不合适请联系QQ 2453419889 我会及时删除本博文 电脑键盘指法练习学习目的 一 正确的指法 二 熟悉字母位置 电脑
  • base64、utf-8、二进制有什么关系?

    一 引言 在开发过程中我们经常会用到GBK utf 8等编码规范 本文为大家介绍了他们的起源 差别以及应用 二 ASCII GBK Unicode Utf 8编码区别 1 文本编码的诞生背景 计算机只能处理数字 如果要处理文本文件就必须先把
  • React Native Map遍历问题

    code for let room of rooms values console log room error TypeError undefined is not a function evaluating iterator typeo
  • 【100%通过率 】【华为OD机试真题c++/java/python】开心消消乐【2022 Q4

    华为OD机试 题目列表 2023Q1 点这里 2023华为OD机试 刷题指南 点这里 题目描述 给定一个N行M列的二维矩阵 矩阵中每个位置的数字取值为0或1 矩阵示例如 1100 0001 0011 1111 现需要将矩阵中所有的1进行反转
  • Linux线程学习(三):pthread常见线程函数

    在任何一个时间点上 线程是可结合的 joinable 或者是分离的 detached 一个可结合的线程能够被其他线程收回其资源和杀死 在被其他线程回收之前 它的存储器资源 例如栈 是不释放的 相反 一个分离的线程是不能被其他线程回收或杀死的
  • 如何使用FastReport .NET 从 JetBrains Rider 中创建PDF报告?

    Fastreport是目前世界上主流的图表控件 具有超高性价比 以更具成本优势的价格 便能提供功能齐全的报表解决方案 连续三年蝉联全球文档创建组件和库的 Top 50 Publishers 奖 FastReport NET官方版下载 qun
  • android开发系列:Android Studio项目添加依赖时下载的jar包在哪

    参考 参考 https blog csdn net wudinaniya article details 75258077 结论 c盘 用户 用户名 gradle caches modules 2 files 2 1
  • python模拟登录网站_Python模拟登录的几种方法

    目录 正文 方法一 直接使用已知的cookie访问 特点 简单 但需要先在浏览器登录 原理 简单地说 cookie保存在发起请求的客户端中 服务器利用cookie来区分不同的客户端 因为http是一种无状态的连接 当服务器一下子收到好几个请
  • 【error】Doubbo 服务启动异常:java.lang.RuntimeException: [source error] getPropertyValue,问题分析,解决方案

    目录 1 报错信息 2 原因分析 3 解决方案 4 提示 1 报错信息 java lang RuntimeException source error getPropertyValue Ljava lang Object Ljava lan
  • R语言—向量

    向量 vector R 语言最基本的数据结构是向量 类似于数学上的集合的概念 由一个或多个元素构成 向量其实是用于存储数值型 字符型 或逻辑型数据的一维数组 创建向量 c 函数 gt a lt 1 给a赋值1 gt a 显示a的值 1 1
  • 解密企业级PPPoE:部署、配置和管理的最佳实践

    亲爱的读者朋友们 今天 我将带你一起探索企业级PPPoE 这个让你畅快玩转互联网的神奇协议 首先 让我们来了解一下什么是PPPoE 它代表着 点对点协议以太网 是一种强大而灵活的网络连接协议 对于企业来说 部署PPPoE意味着你可以轻松实现
  • Java实现实现简单算法之最长对称字符串

    题目 已知一字符串 求其内包含的最长对称字符串 例 已知字符串 google 输出最长对称字符串 goog 已知abada 输出aba 已知sdghjdgzzgdah 输出 dgzzgd 看到题目时 大家第一反应都是模棱两可的 好像可以这样