js数据结构之字符串

前言

嘿,你听说过JavaScript中的字符串吗?哦,别以为这只是一串乏味的字符堆积,它可比你想象的要有趣多了!

想象一下,JavaScript的字符串就像是一群充满个性的小伙伴,每个都有着自己独特的特点和魅力。有的字符串像是那个总是笑眯眯的邻家小妹,每次看到她都会让你觉得心情格外舒畅。而有的字符串则像是那个爱玩捉迷藏的调皮小鬼,你永远不知道下一秒会跳出来给你惊喜。

在JavaScript的字符串世界里,你会遇到各种各样的"奇葩"情况。有时候,它们会变成一条龙,从头到尾游走在你的代码中;有时候,它们会搞起了"串串"大会,一串串地连接在一起,形成一段段有趣的文字。

但别小看这些字符串,它们可不仅仅是一堆字母和符号的简单组合。在JavaScript的世界里,字符串可以是你的好朋友,帮你记录下重要的信息;也可以是你的武器,帮你战胜bug的侵袭。

有时候,你会发现自己在为字符串的"拼拼乐"而欢乐不已;有时候,你又会因为字符串的"调调皮"而捉摸不透。但不管怎样,这些字符串都是JavaScript编程中不可或缺的一部分,它们时而温柔,时而狡猾,但绝对不会让你感到无聊!

所以,当你再次遇到JavaScript中的字符串时,不妨对它们多一些耐心,多一些理解,也许你会被它们的幽默和趣味所折服,甚至成为它们的忠实粉丝呢!

1.初识字符串

首先我们来认识一下字符串中的基本方法,

  1. charAt()查找字符串某一个位置的字符
  2. 可以当成数组一样使用
  3. 字符串拼接
  4. 字符串转数组split('')括号内代表通过什么分开
  5. 数组转字符串join('')括号内代表通过什么拼接
  6. slice截取字符串,左闭右开

我们可以自行打印上述代码观看结果来印证我们的猜想。

那么除了可以将字符串转化为数组来删除字符串中的某个元素,我们也可以手搓一个算法来操作。

这个最后的打印结果是el,是左闭右开的。截取字符串。

2.leetCode344

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

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

示例 1:

css 复制代码
输入: s = ["h","e","l","l","o"]
输出: ["o","l","l","e","h"]

示例 2:

css 复制代码
输入: s = ["H","a","n","n","a","h"]
输出: ["h","a","n","n","a","H"]

提示:

  • 1 <= s.length <= 105
  • s[i] 都是 ASCII 码表中的可打印字符

思路

  1. 使用两个指针,一个指向数组的起始位置,另一个指向数组的末尾位置。
  2. 在循环中,交换这两个指针指向的元素,并将指针向中间移动。
  3. 当两个指针相遇时,数组的元素已经全部反转完成。
ini 复制代码
function reverseString(s) {
  let left = 0; // 左指针
  let right = s.length - 1; // 右指针

  while (left < right) {
    // 交换左右指针所指向的元素
    let temp = s[left];
    s[left] = s[right];
    s[right] = temp;

    // 移动指针到下一个位置
    left++;
    right--;
  }
}

// 示例
let s1 = ["h", "e", "l", "l", "o"];
reverseString(s1);
console.log(s1); // 输出:["o","l","l","e","h"]

let s2 = ["H", "a", "n", "n", "a", "h"];
reverseString(s2);
console.log(s2); // 输出:["h","a","n","n","a","H"]
  1. 定义了一个名为 reverseString 的函数,该函数接受一个字符串数组 s 作为参数。

  2. 在函数内部,初始化了两个指针 leftright,分别指向数组的起始位置和末尾位置。

  3. 进入一个 while 循环,条件是 left < right,即左指针小于右指针时继续循环。

  4. 在循环中,通过交换左右指针所指向的元素来实现反转操作。具体操作是:

    • 创建一个临时变量 temp,用于存储左指针 left 所指向的元素。
    • 将右指针 right 所指向的元素赋值给左指针 left 所在位置。
    • 将临时变量 temp 中存储的元素值赋值给右指针 right 所在位置。
    • 这样就完成了左右指针所指向元素的交换。
  5. 每完成一次交换,左指针向右移动一位(left++),右指针向左移动一位(right--)。

  6. 当左右指针相遇时,表示数组的所有元素都已经完成了反转操作,此时退出循环。

  7. 最后,打印反转后的数组内容。

运行示例中的代码时,首先会对 s1s2 进行原地反转操作,然后打印出反转后的数组内容。

3.小结

当处理 JavaScript 中的字符串时,以下是一些重要的要点:

  1. 不可变性:JavaScript 中的字符串是不可变的,这意味着一旦字符串被创建,就无法直接修改其内容。任何对字符串的操作都会返回一个新的字符串。
  2. 字符访问:可以通过索引来访问字符串中的单个字符,索引从 0 开始,类似于数组。
  3. 长度属性 :使用 length 属性可以获取字符串的长度,即其中包含的字符数。
  4. 字符串连接 :可以使用加号 + 运算符来连接字符串,也可以使用模板字符串(template literals)来实现字符串插值。
  5. 子串提取 :可以使用 substring()slice() 或者直接使用字符串的索引来提取字符串的子串。
  6. 字符串搜索 :可以使用 indexOf()lastIndexOf() 方法来搜索字符串中特定字符或子串的位置。
  7. 字符串替换 :使用 replace() 方法可以将字符串中的指定子串替换为新的内容。
  8. 大小写转换 :使用 toLowerCase()toUpperCase() 方法可以将字符串转换为小写或大写形式。
  9. 空白处理 :可以使用 trim() 方法去除字符串两端的空格,也可以使用 split() 方法将字符串分割成子串数组,然后再进行处理。
  10. 字符串比较 :可以使用比较运算符(如 <>)或者 localeCompare() 方法来比较字符串的大小关系。
相关推荐
烦躁的大鼻嘎8 分钟前
模拟算法实例讲解:从理论到实践的编程之旅
数据结构·c++·算法·leetcode
C++忠实粉丝24 分钟前
计算机网络socket编程(4)_TCP socket API 详解
网络·数据结构·c++·网络协议·tcp/ip·计算机网络·算法
用户37791362947551 小时前
【循环神经网络】只会Python,也能让AI写出周杰伦风格的歌词
人工智能·算法
福大大架构师每日一题1 小时前
文心一言 VS 讯飞星火 VS chatgpt (396)-- 算法导论25.2 1题
算法·文心一言
EterNity_TiMe_1 小时前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
机器学习之心1 小时前
一区北方苍鹰算法优化+创新改进Transformer!NGO-Transformer-LSTM多变量回归预测
算法·lstm·transformer·北方苍鹰算法优化·多变量回归预测·ngo-transformer
yyt_cdeyyds2 小时前
FIFO和LRU算法实现操作系统中主存管理
算法
alphaTao2 小时前
LeetCode 每日一题 2024/11/18-2024/11/24
算法·leetcode
kitesxian2 小时前
Leetcode448. 找到所有数组中消失的数字(HOT100)+Leetcode139. 单词拆分(HOT100)
数据结构·算法·leetcode
VertexGeek3 小时前
Rust学习(八):异常处理和宏编程:
学习·算法·rust