【每日算法】字符串(简单)

83 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情

题目 一

剑指 Offer 05. 替换空格 - 力扣(LeetCode)

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。

示例:

输入:s = "We are happy."
输出:"We%20are%20happy."

分析一

拿到这道题,首先想到的就是抖个机灵,这使用正则替换多方便呀,三下五除二,给出一个解法,先过了再说,提升一波自信先哈哈

实现

function replaceSpace(s: string): string {
    const reg = / /g
    const result = s.replace(reg, '%20')
    return result
};

分析二

显然这道题考察的目的肯定不是让我们用简单的 replace 方法处理,那么我们中规中矩的用遍历做一遍看看

使用遍历的话那就新建一个空字符串,遍历目标字符串,出现空格时替换成%20,否则累加,得出结果即为所求

实现

function replaceSpace(s: string): string {
    let result: string = ''
    for (let i of s) {
        if (i === ' ') {
            result += '%20'
        } else {
            result += i
        }
    }
​
    return result
};

题目 二

剑指 Offer 58 - II. 左旋转字符串 - 力扣(LeetCode)

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

示例:

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

分析一

字符串的题解法通常都会比较取巧,例如本题

由于字符串的转移是保持相对位置不变的

故可以使用复制扩展字符串的方法,在最后截取我们需要的部分来得到我们想要的结果

实现

function reverseLeftWords(s: string, n: number): string {
    const start:number = n
    const end: number = s.length
    s+=s
​
    return s.slice(start, end + n)
};

分析 二

对于字符串相关的题,还有一个常见思路就是先转换为数组,利用操作数组的方法来求解

例如在遍历数组的时候,截取头部前n个元素,拼接到尾部,即得到我们想要的结果

实现

function reverseLeftWords(s: string, n: number): string {
    let arr: string[] = [...s]
    while(n > 0) {
        arr.push(arr.shift())
        n --
    }
​
    return arr.join('')
};