算法合集 | 字符串| Leetcode 344.反转字符串

80 阅读3分钟

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

前言

本系列文章主要会总结一些常见的算法题目以及算法的易错点,难点,以及一些万用的公式,并且结合实际的 Leetcode 题目来进行加深理解以及实际应用,算法这种东西,属于是一到用时方恨少的类型,在平时总结一些常见的简单算法,经常磨练自己的算法思维,对于日常的开发还是能有不少的帮助的。

字符串的特点

  1. 首先 JS 中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变 某个变量保存的字符串,首先要销毁原来的字符串,然后再用另一个包含新值的字符串填充该变量。

图片.png

以上示例中的变量 str 分别是由 'a' 改为 'ab' 这其中的过程并不是对原有字符串的修改,而是建立了一个新的字符串,然后新字符串是两个字符的组合,当然这个过程是在后台进行的,这也就是为什么字符串拼接会比较消耗性能,一般对于字符串的修改都是先转化为数组,修改完成以后在换回字符串。

  1. 有length属性  (length 表示字符串的长度)

  2. 可以通过下标取值(注意 字符串不能通过下标赋值)   下标的最大值 = length-1

  3. 可以循环遍历  (for, for..in, for...of)

上面三个特点可能感觉和 JS 的数组特别的像,因为 JS 的字符串也属于一个可迭代对象

相比较于数组和字符串的区别,就是在于数组是可以进行修改的,而字符串没有办法,就如第一点说的。

比较典型的就是 Leetcode 344. 反转字符串,数组当中存在反转方法 reverse() 以及一大堆修改数组的方法,但是在字符串上并不存在。

下面就来介绍一下这道题。

Leetcode 344. 反转字符串

编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。

不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。

解题

这道题输入为数组,输出也为数组,所以我们可以直接对数据进行修改,就像上面说的,通过字符串 reverse() 方法就可以很简单的解决。

function reverseString(s: string[]): void {
    s.reverse()
};

图片.png

至于这个方法的实现逻辑,那也是比较简单的,我们可以通过定义一个中间变量来保存,通过

t=a
b=a
a=t

这种经典的交换方法来交换数组的每一项。

/**

 Do not return anything, modify s in-place instead.

 */

function reverseString(s: string[]): void {
    let lengthnumber = s.length;
    let leftnumber = 0;
    let rightnumber = length - 1;
    let tempStrstring;
    while (left < right) {
        tempStr = s[left];
        s[left] = s[right];
        s[right] = tempStr;
        left++;
        right--;
    }
};

图片.png