【每天一道算法题】用JavaScript实现的字符串比较算法
题目比较规则如下:
- abc < abd
- ab < abc
- cda > afk
- abc == abc
- a < cnu
实现思路
用最简单直白的方式解释思路,就像比较两个单词在字典中的顺序:
1. 从第一个字母开始比
-
像查字典一样,从左到右逐个字母比较
-
示例:“apple” vs “banana” → 第一个字母 a < b → 直接得出结果
2. 遇到不同字母就决胜负
-
当发现某个位置字母不同时,比较这两个字母的ASCII值
-
示例:“cat” vs “dog” → 第一字母 c (99) < d (100) → “cat” < “dog”
3. 相同前缀看长度
-
如果前面的字母都相同,看哪个单词更短
-
示例:“app” vs “apple” → 前3字母相同 → 短的小 → “app” < “apple”
4. 完全相同才相等
-
只有所有字母都相同且长度完全一致才算相等
-
示例:“hello” vs “hello” → 完全相同 → 相等
完整实现
function compareStrings(str1, str2) {// 获取两个字符串的最小长度const minLength = Math.min(str1.length, str2.length);// 逐个字符比较for (let i = 0; i < minLength; i++) {if (str1[i] !== str2[i]) {// 当字符不同时,直接根据字符的Unicode值比较大小return str1[i].charCodeAt(0) - str2[i].charCodeAt(0);}}// 如果公共部分完全相同,比较字符串长度return str1.length - str2.length;
}// 使用示例
console.log(compareStrings("abc", "abd")); // 输出负数 (abc < abd)
console.log(compareStrings("ab", "abc")); // 输出负数 (ab < abc)
console.log(compareStrings("cda", "afk")); // 输出正数 (cda > afk)
console.log(compareStrings("abc", "abc")); // 输出0 (abc == abc)
console.log(compareStrings("a", "cnu")); // 输出负数 (a < cnu)
总结
这个过程其实优点你查字典:先看第一个字母,谁小谁在前面;如果第一个字母一样,就看第二个字母,以此类推。如果都相同,但一个单词更短,那短的排在前面。