隐藏用户y 2024-06-02 21:59 采纳率: 64.9%
浏览 1

关于算法题求最长公共前缀的相关问题

在求最长公共前缀的算法题中使用如下代码未通过测试用例 strs=["abc","ab"]的原因是什么


```javascript
/**
 * @param {string[]} strs
 * @return {string}
 */
var longestCommonPrefix = function (strs) {
    // 若数组元素等于0,直接返回空
    if (strs.length == 0) return ""
    // 定义最长公共前缀初始化默认为数组第一个元素
    let commonlongestPrefix = strs[0];
    // 遍历数组中每个元素(从第二个元素开始遍历)
    for (let i = 1; i < strs.length; i++) {
        curString = strs[i];
        // 比较数组元素,为了防止数组越界,选择短的数组长度进行比较
        let length = Math.min(commonlongestPrefix.length, curString.length);


        // 遍历数组元素的每一个字母
        for (let j = 0; j < length; j++) {
            if (commonlongestPrefix[j] !== curString[j]) {
                commonlongestPrefix = commonlongestPrefix.substring(0, j)
            }
        }
      
    }
    //abc ab
    return commonlongestPrefix;
};



  • 写回答

3条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    你的 JavaScript 代码在处理字符串数组时没有正确找到最长公共前缀,原因在于处理字符串截取的方式不正确。当 commonlongestPrefix[j] 不等于 curString[j] 时,你直接将 commonlongestPrefix 设置为从 0 开始的子串,但应该继续向左移动,直到找到一个匹配的字符或者到达字符串的开始。以下是修改后的代码:

    /**
     * @param {string[]} strs
     * @return {string}
     */
    var longestCommonPrefix = function (strs) {
        // 若数组元素等于0,直接返回空
        if (strs.length == 0) return ""
        // 定义最长公共前缀初始化默认为数组第一个元素
        let commonlongestPrefix = strs[0];
        // 遍历数组中每个元素(从第二个元素开始遍历)
        for (let i = 1; i < strs.length; i++) {
            curString = strs[i];
            // 比较数组元素,为了防止数组越界,选择短的数组长度进行比较
            let length = Math.min(commonlongestPrefix.length, curString.length);
    
            // 遍历数组元素的每一个字母
            for (let j = 0; j < length; j++) {
                if (commonlongestPrefix[j] !== curString[j]) {
                    // 移动到下一个字符,而不是截取
                    j--;
                }
            }
    
            // 如果当前字符串的前缀完全匹配,则不需要再检查后面的字符
            if (j === -1) break;
        }
        //abc ab
        return commonlongestPrefix;
    };
    

    解决方案:

    1. 当发现 commonlongestPrefix[j] 不等于 curString[j] 时,不要立即截取,而是将 j-- 以尝试找到更长的公共前缀。
    2. 添加一个判断,如果 j 变为 -1(表示已经遍历完当前字符串的前缀),则跳出循环,因为剩下的部分不可能是公共前缀。
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月2日

悬赏问题

  • ¥15 winFrom界面无法打开
  • ¥15 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?