最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 前端算法必刷题系列[64]

    正文概述 掘金(文斌大大鸟)   2021-06-16   452

    这是我参与更文挑战的第 15 天,活动详情查看 更文挑战

    122. 最长公共前缀 (longest-common-prefix)

    标签

    • 字符串
    • 简单

    题目

    leetcode 传送门

    这里不贴题了,leetcode打开就行,题目大意:

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

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

    示例 1:

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

    示例 2:

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

    基本思路

    先做个广告,我上一篇思维题很有意思,可以一看放松下脑子。 点击这里快速进入

    本题有个技巧,可以先对这些字符数组进行排序,排完之后,我们只需要对头尾两个元素进行公共前缀查询就行了。

    第二个点,公共前缀 Js 中可以用一个判断字符串是否以某个字符开头的 api 函数会较简单。

    String.prototype.startsWith()

    例子

    const str1 = 'Saturday night plans';
    
    console.log(str1.startsWith('Sat'));
    // expected output: true
    
    console.log(str1.startsWith('Sat', 3));
    // expected output: false
    
    console.log(str1.startsWith('urday', 3));
    // 从坐标 3开始,就是 true
    

    语法

    参数

    • searchString

    要搜索的子字符串。

    • position 可选

    在 str 中搜索 searchString 的开始位置默认值为 0

    返回值

    描述

    写法实现

    var longestCommonPrefix = function(strs) {
        let [res, len] = ["", strs.length]
        // 特判 len = 0
        if (len === 0) {
            return ""
        }
        // 特判 len = 1
        if (len === 1) {
            return strs[0]
        }
        // 我们可以先简化这个问题,因为 Js 数组可以按字典序排序 sort()
        // 排序后数组只需比较头尾两个元素,找出最长公共前缀
        let startStr = strs.sort()[0]
        let endStr = strs.sort()[len - 1]
        
        for (let i = 0; i < startStr.length; i++) {
            let temp = startStr.substring(0, i+1)
            // 同时以截取的字符串开头,res 就是公共子串
            if (startStr.startsWith(temp) && endStr.startsWith(temp)) {
                res = temp
            }
        }
        return res
    };
    
    let strs = ["flower", "flight", "flow"]
    console.log(longestCommonPrefix(strs))
    

    123. 最长连续递增序列 (longest-continuous-increasing-subsequence)

    标签

    • Array
    • 简单

    题目

    leetcode 传送门

    这里不贴题了,leetcode打开就行,题目大意:

    给定一个未经排序整数数组,找到最长且连续递增子序列,并返回该序列的长度。

    连续递增的子序列 可以由两个下标 l 和 r(l < r)确定,如果对于每个 l <= i < r,都有 nums[i] < nums[i + 1] ,那么子序列 [nums[l], nums[l + 1], ..., nums[r - 1], nums[r]] 就是连续递增子序列。

    示例 1:

    输入:nums = [1,3,5,4,7]
    输出:3
    解释:最长连续递增序列是 [1,3,5], 长度为3。
    尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为 5 和 7 在原数组里被 4 隔开。 
    

    示例 2:

    输入:nums = [2,2,2,2,2]
    输出:1
    解释:最长连续递增序列是 [2], 长度为1。
    

    基本思路

    思路还是比较简单的,就是遍历数组,记录下历史最大,和当前的长度比较更新最大值,遍历到最后,得到最长连续递增序列。代码注释应该已经比较清晰。

    写法实现

    var findLengthOfLCIS = function(nums) {
        if (nums.length === 0) {
            return 0;
        }
        // curCount 记录本次循环时当前递增序列长度
        let [res, curCount, len] = [0, 1, nums.length]
        for (let i = 0; i < len; i++) {
            if (nums[i] < nums[i+1]) {
                // console.log(nums[i], '==')
                curCount++;
            } else {
                // 说明递增断了,从当前,记录下一个递增序列吧
                curCount = 1;
            }
            // 当前递增序列长度跟历史比较取最大
            res = Math.max(res, curCount)
        }
        return res
    }
    
    let nums = [1,3,5,4,7]
    console.log(findLengthOfLCIS(nums))
    

    今天就到这儿,想跟我一起刷题的小伙伴可以加我微信哦 点击此处交个朋友 Or 搜索我的微信号infinity_9368,可以聊天说地 加我暗号 "天王盖地虎" 下一句的英文,验证消息请发给我 presious tower shock the rever monster,我看到就通过,加了之后我会尽我所能帮你,但是注意提问方式,建议先看这篇文章:提问的智慧

    参考

    • developer.mozilla.org/zh-CN/docs/…

    起源地下载网 » 前端算法必刷题系列[64]

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元