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() 方法来比较字符串的大小关系。
相关推荐
好奇龙猫1 小时前
【学习AI-相关路程-mnist手写数字分类-win-硬件:windows-自我学习AI-实验步骤-全连接神经网络(BPnetwork)-操作流程(3) 】
人工智能·算法
sp_fyf_20242 小时前
计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-01
人工智能·深度学习·神经网络·算法·机器学习·语言模型·数据挖掘
香菜大丸2 小时前
链表的归并排序
数据结构·算法·链表
jrrz08282 小时前
LeetCode 热题100(七)【链表】(1)
数据结构·c++·算法·leetcode·链表
oliveira-time2 小时前
golang学习2
算法
南宫生3 小时前
贪心算法习题其四【力扣】【算法学习day.21】
学习·算法·leetcode·链表·贪心算法
懒惰才能让科技进步4 小时前
从零学习大模型(十二)-----基于梯度的重要性剪枝(Gradient-based Pruning)
人工智能·深度学习·学习·算法·chatgpt·transformer·剪枝
Ni-Guvara4 小时前
函数对象笔记
c++·算法
泉崎4 小时前
11.7比赛总结
数据结构·算法
你好helloworld4 小时前
滑动窗口最大值
数据结构·算法·leetcode