跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava算法

字符串常用算法:最长公共前缀、回文子串与数值运算

针对字符串处理场景,整理最长公共前缀、最长回文子串、二进制求和及字符串相乘四个经典算法。使用 Java 实现,分别应用两两比较、中心扩散、模拟竖式加法及无进位乘法策略。解析各解法的时间与空间复杂度,提供完整代码示例,辅助掌握字符串操作核心技巧。

JavaCoder发布于 2026/3/16更新于 2026/8/1864 浏览
字符串常用算法:最长公共前缀、回文子串与数值运算

一、14. 最长公共前缀

题目链接:14. 最长公共前缀

解题思路

  • 思路一:两两求公共前缀,记录在结果字符串中,继续与后续字符串比较。
  • 思路二:以第一个字符串为基准,遍历其字符并与数组中其他字符串对应下标字符比较。若超出某字符串长度或字符不同则返回;若遍历完未找到差异,则第一个字符串即为结果。

解题代码

// 思路一:时间复杂度 O(m*n),空间复杂度 O(1)
class Solution {
    public String longestCommonPrefix(String[] strs) {
        // 两两比较
        String ret = strs[0];
        for (int i = 1; i < strs.length; i++) {
            ret = commonPrefix(ret, strs[i]);
        }
        return ret;
    }

    // 返回两个字符串的公共前缀
    private String commonPrefix(String s1, String s2) {
        int last = 0;
        while (last < s2.length() && last < s1.length() && s2.charAt(last) == s1.charAt(last)) {
            last++;
        }
        return s1.substring(0, last);
    }
}

// 思路二:时间复杂度 O(m*n),空间复杂度 O(1)
class Solution {
    public String longestCommonPrefix(String[] strs) {
        // 一起比较
        for (int i = 0; i < strs[0].length(); i++) {
            char ch = strs[0].charAt(i);
            for (int j = 1; j < strs.length; j++) {
                if (i >= strs[j].length() || ch != strs[j].charAt(i)) {
                    return strs[0].substring(0, i);
                }
            }
        }
        return strs[0];
    }
}

二、5. 最长回文子串

题目链接:5. 最长回文子串

解题思路

  • 中心扩散法:从回文串的中心开始向两边扩展。如果两边字母相同则继续扩展,否则停止。
  • 需分别考虑回文子串长度为奇数和偶数的情况。

解题代码

// 时间复杂度 O(n^2),空间复杂度 O(1)
class Solution {
    public String longestPalindrome(String s) {
        String ret = "";
        for (int i = 0; i < s.length(); i++) {
            // 奇数长度
            int left = i;
            int right = i;
            while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
                left--;
                right++;
            }
            if (right - left - 1 > ret.length()) {
                ret = s.substring(left + 1, right);
            }

            // 偶数长度
            left = i;
            right = i + 1;
            while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {
                left--;
                right++;
            }
            if (right - left - 1 > ret.length()) {
                ret = s.substring(left + 1, right);
            }
        }
        return ret;
    }
}

三、67. 二进制求和

题目链接:67. 二进制求和

题目解析

模拟竖式加法过程。

解题思路

  • 模拟竖式加法,从后向前遍历两个字符串。
  • 定义变量存储对应位相加的和,对 2 取余得到结果位,除以 2 得到进位。
  • 当两个字符串都遍历结束且进位为 0 时,得到逆序后的结果字符串。
  • 最后逆序返回即可。

解题代码

// 时间复杂度 O(n),空间复杂度 O(1)
class Solution {
    public String addBinary(String a, String b) {
        StringBuffer ret = new StringBuffer();
        int cruA = a.length() - 1;
        int cruB = b.length() - 1;
        int tmp = 0;
        while (cruA >= 0 || cruB >= 0 || tmp != 0) {
            if (cruA >= 0) tmp += a.charAt(cruA--) - '0';
            if (cruB >= 0) tmp += b.charAt(cruB--) - '0';
            ret.append((char) (tmp % 2 + '0'));
            tmp /= 2;
        }
        return ret.reverse().toString();
    }
}

四、43. 字符串相乘

题目链接:43. 字符串相乘

题目解析

将字符串视为数字,计算乘积并返回字符串形式。

解题思路

  • 使用竖式运算规则,先不进位,在最后结果中统一处理进位。
  • 竖式计算从末尾开始,先将两个字符串逆序。
  • 每个位计算结果在结果数组中的下标为原来两个字符串下标之和。
  • 进位时将每位数字除以 10 的结果记录到进位变量中。
  • 处理前导零(如 152 * 0 = 000),注意极端情况全为 0 时保留一位。

解题代码

// 时间复杂度 O(n*m),空间复杂度 O(n+m)
class Solution {
    public String multiply(String num1, String num2) {
        int[] arr = new int[num1.length() + num2.length() - 1];
        // 逆序
        char[] n1 = new StringBuffer(num1).reverse().toString().toCharArray();
        char[] n2 = new StringBuffer(num2).reverse().toString().toCharArray();

        // 无进位相乘,相加
        for (int i = 0; i < n1.length; i++) {
            for (int j = 0; j < n2.length; j++) {
                arr[i + j] += (n1[i] - '0') * (n2[j] - '0');
            }
        }

        // 进位
        int tmp = 0;
        int cur = 0;
        StringBuffer ret = new StringBuffer();
        while (cur < arr.length || tmp > 0) {
            if (cur < arr.length) tmp += arr[cur++];
            ret.append((char) (tmp % 10 + '0'));
            tmp /= 10;
        }

        // 处理前导零
        while (ret.length() > 1 && ret.charAt(ret.length() - 1) == '0') {
            ret.deleteCharAt(ret.length() - 1);
        }
        return ret.reverse().toString();
    }
}

目录

  1. 一、14. 最长公共前缀
  2. 解题思路
  3. 解题代码
  4. 二、5. 最长回文子串
  5. 解题思路
  6. 解题代码
  7. 三、67. 二进制求和
  8. 题目解析
  9. 解题思路
  10. 解题代码
  11. 四、43. 字符串相乘
  12. 题目解析
  13. 解题思路
  14. 解题代码
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • WebSSH2 实战:基于 Node.js 搭建浏览器 SSH 终端
  • WebApp 设计三大关键维度:导航、配置模型与核心要点
  • 汇编语言实现求两个数的最大公约数
  • OmniXtreme: 高动态人形机器人控制通用性壁垒突破
  • RAG 系统中文本分割(Chunking)的原理与最佳实践
  • Power BI 集成 Python 实现高级数据可视化与分析
  • Qoder AI 编程工具从部署到深度使用实战详解
  • 春晚机器人集群:分布式实时协同算法与灵巧手实现
  • 金融类 App 渗透测试实战:从 Weblogic 到 Shiro 反序列化
  • Python 基础语法与核心概念详解
  • WebGL Inspector:专业级 WebGL 调试工具箱
  • 从 try-catch 到链式调用:一种更优雅的 async/await 错误处理方案
  • Java Swing 自定义组件实现文字滚动效果
  • 离散傅里叶变换与 OpenCV 实现详解
  • 从零训练大语言模型:环境与代码实战指南
  • FDTD 算法仿真超透镜:参数调整与聚焦实现
  • DWR3 基于 Spring MVC 配置 Controller 的方法
  • 动态规划 01 背包问题详解、模板与空间优化
  • 基于 Unity 开发 Pico VR 基础应用:从环境搭建到实战部署
  • AI 产品经理指南:面试百人后的洞察与职业建议

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online