第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

【Leetcode】【簡單】【14最長公共前綴】【JavaScript】

標(biāo)簽:
JavaScript

题目

14. 最长公共前缀

编写一个函数来查找字符串数组中的最长公共前缀。

如果不存在公共前缀,返回空字符串 ""

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["dog","racecar","car"]
输出: ""
解释: 输入不存在公共前缀。

说明:

所有输入只包含小写字母 a-z 。

解答

解答一:两层for循环

误区1:刚开始考虑了先数组元素遍历,然后再元素(字符串)从头到尾比较,但实际上要先以第一个元素strs[0]为基准。

漏洞1:没有考虑strs元素为空字符串的情况,如[""],未考虑连续元素都相等的情况如["c","c"],结果这些在提交时都是要判断的。

个人思路:

1、若传入为空数组[]或空字符串[""]则直接返回空字符串;

2、取传入数组的第一个元素为基准字符串,并声明common数组,用于存放公共前缀;

3、第一层i循环(可以想像指针指向strs[0],且从strs[0][0]往str[0][1、2、3…]移动),第二层j循环(可以想像指针指向strs[1],且从strs[1]往str[2、3…]移动),即题中"flower"中的"f",与"flow"中的"f"相比较;

4、相同则j自增,即"flower"中的"f"继续与"flight"中的"f"比较;

5、若j循环未彻底完成,即说明当前的str[i]已经不是公共前缀了,就可以返回common了;若此次j循环彻底完成,则将当前的str[i],push进common;

6、外层的i循环结束后,若未触发过j循环内的return的话,类似["a","a","a"]["ab","abc","abcd"]等等情况的,直接返回strs[0],即str即可。

代码如下:(已在leetcode提交通过,执行用时104ms)

var longestCommonPrefix = function(strs) {    if (strs.length===0 ||strs[0].length===0){return "";}      
    var str=strs[0],                                
        common=[];                                  
    for(let i=0,len1=str.length;i<len1;i++){        
        for(let j=1,len2=strs.length;j<len2;j++){   
            if(str[i]!==strs[j][i]){                 
                return common.join("");
            }
        }
        common.push(str[i]);
    }return str;
};


 两层循环示意图如下:

(GIF)

 

解答二:水平扫描法

参考平台提供题解,提供的第一种方法是“水平扫描法”:

仍然是先把数组中第一个元素str取出来,然后以这个元素为基准,

使用stringObject.indexOf(searchvalue,fromindex)方法查找,

查一下str是否在strs[i]索引为0的位置,

如果不在索引为0的位置,使用stringObject.substring(start,stop)删减字符串长度,

把str长度减1,再继续查,直到str长度减到0为止。

代码如下:(已在leetcode提交通过,执行用时100ms)


var longestCommonPrefix = function(strs) {    
if (strs.length===0 ||strs[0].length===0){return "";}    
var str=strs[0];    for (let i=1,len=strs.length;i<len;i++){       
 while(strs[i].indexOf(str)!==0) {           
  if (str.length === 0) {return "";}
            str = str.substring(0, str.length - 1);
        }
    }return str;
}
 public String longestCommonPrefix(String[] strs) {    if (strs.length == 0) return "";
    String prefix = strs[0];    for (int i = 1; i < strs.length; i++)       
     while (strs[i].indexOf(prefix) != 0) {
            prefix = prefix.substring(0, prefix.length() - 1);           
             if (prefix.isEmpty()) return "";
        }        
    return prefix;
}


 平台提供 Java 实现代码

平台提供示意图如下:

https://img1.sycdn.imooc.com//5c851aaf000111a904860551.jpg

解答三:水平扫描法(改良)

参考平台提供题解,水平扫描法有改良版,

不是取数组第一个元素,还是直接取该元素中的单独字符,类似本页中第一种方法,两个for循环,代码稍有区别。

首先第一层for循环(枚举首个字符串的所有字符),使用stringObject.charAt(index)方法获取数组第一个元素的第i个字符,赋值给c,

第二层for循环,从索引1开始遍历数组中所有剩余元素的对应i位置的字符,并与c比较,

如果该字符不等于c,或者压根没有该字符,直接使用

代码如下:(已在leetcode提交通过,执行用时92ms)

var longestCommonPrefix = function(strs) {    
if (strs.length===0 ||strs[0].length===0){return "";}    
for (let i=0,len1=strs[0].length;i<len1;i++){
        let c=strs[0].charAt(i);       
        
         for (let j=1,len2=strs.length;j<len2;j++){           
          if(i===strs[j].length||strs[j].charAt(i)!==c){             
             return strs[0].substring(0,i);
            }
        }
    }return strs[0];
}


 作者:孙达

原文链接:https://www.cnblogs.com/2463901520-sunda/p/10498955.html


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消