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

算法题解:LeetCode 389 找不同

本题要求在字符串 t 中识别出比 s 多出的一个字符。t 由 s 重排并追加一个字符构成。解决方案采用计数数组记录字符频次,遍历 s 累加,遍历 t 递减,首次出现负数的字符即为结果。该算法时间复杂度为 O(n),空间占用固定为 26 个整数,适合处理大规模文本校验。

云间运维发布于 2024/7/13更新于 2026/10/24102 浏览
算法题解:LeetCode 389 找不同

问题描述

给定两个仅包含小写字母的字符串 s 和 t。字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。

请找出在 t 中被添加的字母。

示例 1:

输入:s = "abcd", t = "abcde" 输出:"e" 解释:'e' 是那个被添加的字母。

示例 2:

输入:s = "", t = "y" 输出:"y"

解题思路

既然 t 只是 s 多了一个字符,那么两者的字符频率分布必然存在差异。我们可以用一个长度为 26 的数组来统计每个字母出现的次数。

遍历 s 时对应位置加一,遍历 t 时对应位置减一。最终,如果某个位置的计数小于零,说明该字符在 t 中多出现了一次,也就是我们要找的目标。这种方法不需要额外的哈希表,效率很高。

代码实现

class Solution {
    public char findTheDifference(String s, String t) {
        int[] cnt = new int[26];
        // 统计 s 中字符频次
        for (int i = 0; i < s.length(); ++i) {
            cnt[s.charAt(i) - 'a']++;
        }
        // 减去 t 中字符频次,检测异常
        for (int i = 0; i < t.length(); ++i) {
            cnt[t.charAt(i) - 'a']--;
            if (cnt[t.charAt(i) - 'a'] < 0) {
                return t.charAt(i);
            }
        }
        return ' ';
    }
}

小结

这道题考察的是对字符频次的敏感度。实际开发中遇到类似的数据校验场景,这种计数法往往比排序或哈希更节省空间。动手敲一遍代码有助于理解边界情况,比如空字符串的处理。

目录

  1. 问题描述
  2. 解题思路
  3. 代码实现
  4. 小结

更多推荐文章

查看全部
  • DeOldify Web UI 性能优化:图片懒加载、Base64 压缩与 WebP 转换
  • 大模型中 Attention 机制的常见问题与优化方案
  • DeepFace + OpenCV 实现实时情绪分析系统
  • 基于 Docker 本地部署 RSSHub 并通过内网穿透远程访问
  • 10 篇大模型领域前沿论文汇总
  • Spring Cloud Gateway 内置 Filter 实战:AddRequestHeader 与 RewritePath
  • 机器人灵巧操作新突破:学习系鞋带与挂衣服
  • VSCode SSH 远程连接卡在下载 Server 问题的解决方案
  • Spec-Kit 与 Copilot 实现 AI 规格驱动开发
  • OSCP 实战笔记:获取并破解 Net-NTLMv2 哈希
  • MySQL 数据库基础核心知识点梳理
  • FastAPI:Python 高性能 Web 框架深度解析
  • C++ 模板编程入门:函数与类模板详解
  • Kimi K2.5 模型多模态与编程能力实测
  • 多模型协同:构建 LLM 代理与网关整合 AI 大模型
  • Java 实现 PDF 文字与图片水印添加及 MinIO 下载实战
  • 交换排序详解:冒泡优化与快速排序四种实现
  • 网络安全入门指南:从基础理论到攻防实战路径
  • Llama 3 发布,大模型开源与闭源之争的本质是什么?
  • Python 中更值得避开的 18 个写法

相关免费在线工具

  • 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