Leetcode No.14

在这里插入图片描述


JS 1°

var longestCommonPrefix = function(strs) {
    let output='';  
    let flag = 0;   //flag来表示里层循环状态
    if(strs.length==0){ //判断是不是给爷传了个空数组
        return "";
   }else if(strs.length==1){
       return strs[0];
   }else{
       for(let i = 0;i<strs[0].length;i++)
        {
       for(let j = 0;j < strs.length-1;j++){
           if(strs[j][i]==strs[j+1][i]){ 
                flag = 1;
               continue;
           }else{
                flag = 0;
               break;
           }
       }
       if(flag==1){
           output=output+strs[0][i];
       }else if(flag==0){
           break;
       }
   }
   }
   return output;
};

在这里插入图片描述
贴提交结果的截图是因为突出这个执行时间。。QAQ简直太慢了,还用了flag。。属实很笨。要注意的是题里给的str.length范围,开始提交报错的原因竟然是输入了一个空数组。。。下次一定要记得考虑范围!

JS 2°(大佬解法)

var longestCommonPrefix = function(strs) {
    if(strs.length == []){
        return ""
    }else{
        let res = ""
        let max = strs[0]
        let min = strs[0]
        for(var i = 0;i<strs.length-1;i++){
            min = min > strs[i+1] ? strs[i+1] : min
            max = max < strs[i+1] ? strs[i+1] : max
            //找到数组中字符串的最大和最小值
        }
        //  比较最大和最小的公共前缀
        for(var x = 0;x<max.length;x++){
            if(max[x] == min[x]){
                res = res + max[x]
            }else{
                break
            }
        }
        return res
    }
    
};

一开始很难理解,为什么要比较一次字符串,又看了一下js的字符串,转化asc码,又测试了几次,发现确实好用,比较字符串间接等于我上面的一层循环。不出所料这个执行速度击败99%
但这个方法的隐藏条件是全部为小写字母,才能利用ASC码递增的特点)
=。=

python

class Solution:
    def longestCommonPrefix(self, strs: List[str]) -> str:
        if not strs: return ""
        str0 = min(strs)
        str1 = max(strs)
        print(str0)
        for i in range(len(str0)):
            if str0[i] != str1[i]:
                return str0[:i]
        return str0

py的思路也挺简单,方法也方便,min max相当于js的比较字符串,而这个[:i]切割字符串真的是太方便了

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页