本文介绍一种简洁、高效且可读性强的 javascript 方法,用于计算两个字符串的最长公共后缀(lcsuffix),无需反转字符串或引入额外依赖,时间复杂度为 o(min(m,n)),代码直观易维护。
本文介绍一种简洁、高效且可读性强的 javascript 方法,用于计算两个字符串的最长公共后缀(lcsuffix),无需反转字符串或引入额外依赖,时间复杂度为 o(min(m,n)),代码直观易维护。
要找出两个字符串的最长公共后缀,核心思路是从末尾字符开始逐位向前比对,直到遇到不匹配的字符或任一字符串遍历完毕。相比“先反转 → 求前缀 → 再反转”的间接方式,直接从尾部索引反向遍历更清晰、无冗余操作,也避免了创建中间字符串带来的内存开销。
以下是推荐实现:
function longestCommonSuffix(str1, str2) {
let i = 0;
const len1 = str1.length;
const len2 = str2.length;
// 从末尾同步比较:str1[len1-1-i] 与 str2[len2-1-i]
while (i <p>✅ <strong>使用示例:</strong> </p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25"><img
src="https://img.php.cn/upload/manual/001/221/864/6a6091217fc2f681.png" alt="Java JDK 25" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25" class="overflowclass">Java JDK 25</a>
<p class="overflowclass">Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。</p>
</div>
<a rel="nofollow" href="/xiazai/gongju/2530" title="Java JDK 25" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><pre class="brush:php;toolbar:false;">console.log(longestCommonSuffix("programming", "coding")); // "ing"
console.log(longestCommonSuffix("hello", "world")); // ""
console.log(longestCommonSuffix("abccba", "xyzcba")); // "cba"
console.log(longestCommonSuffix("", "test")); // ""
console.log(longestCommonSuffix("same", "same")); // "same"⚠️ 注意事项:
- 该函数区分大小写(如 "Test" 与 "test" 的公共后缀为空),如需忽略大小写,可在比较前统一转为小写(str1[len1-1-i].toLowerCase() === str2[len2-1-i].toLowerCase());
- 空字符串参与运算时结果恒为空,符合语义直觉;
- 时间复杂度为 O(k),其中 k 是最长公共后缀长度,最坏情况(两字符串完全相同)为 O(min(m, n)),空间复杂度为 O(1)(不计返回字符串开销);
- slice() 方法天然支持负索引,但此处显式使用 len - i 更利于理解逻辑意图,避免歧义。
该实现兼顾性能、可读性与健壮性,适合作为通用工具函数集成至工具库或业务逻辑中。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










