zoukankan      html  css  js  c++  java
  • 刷题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);
    };
    

      

  • 相关阅读:
    php if() 括号中为 真详解
    php 写入日志
    trim,rtrim,ltrim详解
    SQlite3 的简单用法。 调用本地时间
    RuntimeError at /host You called this URL via POST, but the URL doesn't end in a slash and you have APPEND_SLASH set. Django can't redirect to the slash URL while maintaining POST data. Change your fo
    D3.js 入门系列3
    js中const,var,let区别
    D3.js 入门系列2 — 选择元素和绑定数据
    D3.js 入门系列1
    SVG 教程03
  • 原文地址:https://www.cnblogs.com/liu-xin1995/p/12504704.html
Copyright © 2011-2022 走看看