• 刷题45(力扣两道题)


    79.字符串压缩

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/compress-string-lcci

    题目描述

    字符串压缩。利用字符重复出现的次数,编写一种方法,实现基本的字符串压缩功能。比如,字符串aabcccccaaa会变为a2b1c5a3。若“压缩”后的字符串没有变短,则返回原先的字符串。你可以假设字符串中只包含大小写英文字母(a至z)。

    示例1:

    输入:"aabcccccaaa"
    输出:"a2b1c5a3"

    示例2:

    输入:"abbccd"
    输出:"abbccd"
    解释:"abbccd"压缩后为"a1b2c2d1",比原字符串长度更长。
    提示:

    字符串长度在[0, 50000]范围内。

    重难点

    遍历字符串,遇到不相等的字符时(S[i+1] !== S[j]),计算与当前字符(S[i+1])不相等的字符(S[j])的个数,并把字符(S[j])和个数放到新的字符串中。

    题目分析

    1. 使用字符串分割函数split,把字符串转换成字符串数组,节省代码运行时间;
    2. 遍历字符串数组,i记录数组位置,j记录不相同字符的下标;
    3. 遇到不相等的字符时(S[i+1] !== S[j]),计算与当前字符(S[i+1])不相等的字符(S[j])的个数,并把字符(S[j])和个数放到新的字符串中;
    4. 比较原来字符串长度和“压缩”后的字符串长度,若是原来字符串长度<=“压缩”后的字符串长度,则返回原来字符串,否则,返回“压缩”后的字符串。
    /**
     * @param {string} S
     * @return {string}
     */
    var compressString = function(S) {
       let res = S.split('');  //返回分割后的字符串数组,节省时间
       let num = '';
       for(let i=0,j=0;i<res.length;i++){
           if(res[i+1] !== res[j]){
               num += res[j] + (i+1-j);
               j = i+1;
           }
       }
        return S.length <= num.length ? S:num;
    };
    

      

    80.左旋转字符串

    题目链接

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof

    题目描述

    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。

    示例 1:

    输入: s = "abcdefg", k = 2
    输出: "cdefgab"

    示例 2:

    输入: s = "lrloseumgh", k = 6
    输出: "umghlrlose"
     

    限制:

    1 <= k < s.length <= 10000

    题目分析

    法一:

    1. 从n开始遍历字符串,把字符放到新的字符串中;
    2. 从0开始n结束遍历字符串,把字符串拼接在新的字符串中。
    /**
     * @param {string} s
     * @param {number} n
     * @return {string}
     */
    var reverseLeftWords = function(s, n) {
        let res = '';
        for(let i=n;i<s.length;i++){
            res += s[i];
        }
        for(let j=0;j<n;j++){
            res += s[j];
        }
        return res;
    };
    

      法二:使用Js方法

    1. 使用substr() 方法在字符串中抽取从 n下标开始到字符串结尾的字符;
    2. 使用slice()方法从已有的数组中返回从0到n的元素;
    3. 拼接两个字符串。

    在此题中也可以只用substr() 方法,或者只用slice()方法。

    /**
     * @param {string} s
     * @param {number} n
     * @return {string}
     */
    var reverseLeftWords = function(s, n) {
        return s.substr(n)+s.slice(0,n);
    };
    

      

  • 相关阅读:
    [译]The multi Interface
    [译]libcurl_tutorial
    [译]curl_multi_perform
    [译]curl_multi_info_read
    [译]libcurl错误码
    YumRepo Error: All mirror URLs are not using ftp, http[s] or file
    linux 修改文件用户组和所有者
    linux禁止root用户直接登录sshd并修改默认端口
    修改root登录用户名减少阿里云Linux主机“被暴力破解”警告
    CentOS云主机安全之新增ssh登录账户、禁止ROOT登陆
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12504704.html
Copyright © 2020-2023  润新知