JavaScript:字符串

news2024/9/20 1:04:18

文章目录

  • 字符串
    • 344. 反转字符串
      • reverse() 方法(打基础的时候,不要太迷恋库函数)
      • 代码及思路
    • 541. 反转字符串 II
      • JavaScript String split() 方法
      • JavaScript Array join() 方法
      • 代码分析见注释
    • 剑指 Offer 05. 替换空格
      • 思路
      • 注意:上面代码该空格的要空格

字符串

344. 反转字符串

reverse()
打基础的时候,不要太迷恋库函数

reverse() 方法(打基础的时候,不要太迷恋库函数)

reverse() 方法反转数组中元素的顺序。
在这里插入图片描述

代码及思路

思路很简单
反转字符串 :只需要首尾相应的位置交换元素即可

/**
 * @param {character[]} s
 * @return {void} Do not return anything, modify s in-place instead.
 */
var reverseString = function(s) {
    // 打基础的时候,不要太迷恋库函数
    // s.reverse()
    // return s
    reverse(s)
};

var reverse = function(s) {
    let l = 0, r = s.length - 1
    while(l <= r) {
       const _ = s[l]
       s[l++] = s[r]
       s[r--] = _
    }
}

541. 反转字符串 II

JavaScript String split() 方法

split() 方法将字符串拆分为子字符串数组。
split() 方法返回新数组,不会更改原始字符串。
如果 (" ") 用作分隔符,则字符串在单词之间进行拆分。
[图片]

JavaScript Array join() 方法

join() 方法将数组作为字符串返回。
元素将由指定的分隔符分隔。默认分隔符是逗号 (,)。
注释:join() 方法不会改变原始数组。
在这里插入图片描述

代码分析见注释

/**
 * @param {string} s
 * @param {number} k
 * @return {string}
 */
var reverseStr = function(s, k) {

/* 
思路:2k一个区间部分反转---循环 i += 2*k,前k个反转,利用左右指针,交换即可,注意右指针边界,剩余字符少于k,全部反转
 */

    // 首先把字符串处理成字符串数组,方便进一步操作
    let strArr = s.split("")
    let len = s.length
    // 取每2k字符 循环
    for(let i = 0; i < len; i += 2*k) {
        let left = i, right = i + k - 1
        // 我们这里设置的左右边界是超出范围的,主要是方便后面while语句写法
        // right > len 表示剩余字符少于k,要全部反转,我们就把右指针安排在尾端
        if(right > len - 1) right = len - 1
        while(left <= right) {
            const _ = strArr[left]
            strArr[left++] = strArr[right]
            strArr[right--] = _
        }
    }
    return strArr.join("")
 
};

剑指 Offer 05. 替换空格

思路

  1. 首先扩充数组到每个空格替换成"%20"之后的大小。
  2. 然后从后向前替换空格,也就是双指针法,过程如下:
  3. i 指向新长度的末尾,j 指向旧长度的末尾。

左边的时数字给右边,左边的是空格给右边%20

/**
 * @param {string} s
 * @return {string}
 */
var replaceSpace = function(s) {
    /* 
        增加数组长度 通过空格的个数
        利用双指针 快指针指向初始末尾 慢指针指向增加后的末尾
        快指针遇到空格,慢指针对应添加元素 %20 向前移动三位(填%20) 再移动一位给下一次
        快指针遇到不是空格,把当前元素给慢指针 向前移动一位
     */
     
    // 1 字符串转数组
    const strArr = Array.from(s)
    // 2 空格个数
    let count = 0
    for(let i = 0; i < strArr.length; i++) {
        if(strArr[i] === ' ') {
            count++
        }
    }
    // 3 双指针初始化
    let left = strArr.length - 1
    let right = strArr.length + count * 2 - 1
    // 4 循环  if 遇到空格  else 遇到值
    while(left>=0) {
        if (strArr[left] === ' ') {
            strArr[right--] = '0'
            strArr[right--] = '2'
            strArr[right--] = '%'
            left--
        } else {
            strArr[right--] = strArr[left--]
        }
    }
    // 5 返回新的字符串  数组转字符串
    return strArr.join("")
};

注意:上面代码该空格的要空格

strArr[left] === ’ '不空格会报错!!!!部分案例不能通过
这里说了空格的时候就要加空格,不要写成空字符串的形式
字符串转为数组
Array.from()
在这里插入图片描述
在这里插入图片描述
str.split()
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/489156.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机模式识别有哪些SCI期刊推荐? - 易智编译EaseEditing

计算机模式识别是指利用计算机技术&#xff0c;识别、分析和理解图像、声音、文本等各种模式的能力。以下是一些推荐的SCI期刊&#xff1a; IEEE Transactions on Pattern Analysis and Machine Intelligence IEEE Transactions on Pattern Analysis and Machine Intelligence …

OpenGL学习日志之模板测试

模板测试&#xff08;Stencil Test&#xff09;出现原因 深度测试更多是为了解决如何区分物体前后遮挡关系&#xff0c;从而选择丢弃片段的测试。而模板测试&#xff0c;是通过设置片元模板缓冲区模板值和引用模板值&#xff0c;再按照我们设定的运算函数来丢弃某些片段&#…

HTB-Brainfuck

HTB-Brainfuck 信息收集443端口https://sup3rs3cr3t.brainfuck.htb/https://brainfuck.htb/和www.brainfuck.htb 立足读取root.txt内容oresits -> root 信息收集 443端口 查看对应证书。 从证书中能获得 Email Address&#xff1a; orestisbrainfuck.htbCommon Name&#…

解决echarts 在缩放中模糊的问题

echarts 在缩放中模糊的问题 参考&#xff1a;缩放带来的echarts模糊 1、echarts.init(dom,null,{ renderer : svg }); 2、echarts.init(chart,null, { devicePixelRatio: 2 });问题&#xff1a;在使用dom-to-image插件截图的情况下&#xff1a; 1、使用方式一 { renderer : …

Jetson Nano emmc版本系统镜像备份和烧录

一、镜像备份 1&#xff0e;将待复制的jetson设备进入恢复模式&#xff0c;用数据线连接jetson设备和主机。 对于原厂开发板将FC_REC引脚与GND短接&#xff0c;通过micro-usb到usb数据线连接到电脑。 在电脑的ubuntu通过lsusb命令查看需要备份的设备是否已经接入&#xff0c…

vue3.x + vite4.3构建属于自己的组件库并发布npm包

在国内的项目研发过程中&#xff0c;使用vue框架的项目占比很大&#xff0c;同样延伸出了很多非常优秀的UI组件库&#xff0c;比如element-plus、ant-design等&#xff1b;优势&#xff1a;资源较少&#xff0c;快速开发&#xff0c;丰富的API&#xff0c;阅读性、性能优化更好…

医疗实验室信息管理系统源码(云LIS)

云LIS系统源码是一种医疗实验室信息管理系统&#xff0c;提供全面的实验室信息管理解决方案。它的主要功能包括样本管理、检测流程管理、报告管理、质量控制、数据分析和仪器管理等。 云LIS源码技术说明&#xff1a; 技术架构&#xff1a;Asp.NET CORE 3.1 MVC SQLserver Re…

Spring:使用注解进行Spring开发(@Component、@Configuration、@ComponentScan、@Autowired等)

Component、Configuration、ComponentScan、Autowired、Scope、Value、Resource、Bean、Qualifier、PropertySource等注解 1. 注解和配置文件applicationContext.xml配合使用 现在有一个接口类Book3Dao、和其实现类Book3DaoImpl&#xff0c;利用注解和配置文件在测试类上调用其…

【Linux网络】网络应用层的 http 和 https协议

文章目录 1、http协议1.1 认识URL1.2 http协议格式1.3 http的方法&#xff08;GET和POST&#xff09;1.4 状态码1.5 cookie1.6 短连接和长连接 2、https协议2.1 常见的加密方式2.2 探究https协议的加密2.3 CA证书 1、http协议 在之前学习序列化和反序列化的时候&#xff0c;认…

Linux 之 vi 文本编辑器(二)

1、文本编辑器简介 Linux 中最常用的文本编辑器&#xff1a; vi&#xff1a;类 Unix 系统中默认的文本编辑器 vim&#xff1a;vi 编辑器的增强版本&#xff0c;习惯上也称 vi vi 文本编辑器的作用和特性&#xff1a; vi 可以执行插入、删除、查找、替换等众多文本操作&…

网络计算模式复习(四)

MapReduce MapReduce分布式处理技术、分布式的文件系统GFS、结构化的BigTable存储系统是Google的三个核心技术。 Map-Reduce&#xff1a;用于大规模数据集的并行计算。 &#xff08;分而治之&#xff09;将要执行的问题拆解成Map&#xff08;映射&#xff09;和Reduce&#x…

SpringBoot整合FreeMarker

一、FreeMarker简述 在线文档&#xff1a;http://freemarker.foofun.cn/ FreeMarker 也是一款模板引擎技术&#xff0c;它是一种基于模板和要改变的数据&#xff0c;并用来生成输出文本(HTML网页&#xff0c;电子邮件&#xff0c;配置文件&#xff0c;源代码等)的通用工具。当然…

创建一个react项目

文章目录 1&#xff1a;命令行输入2&#xff1a;在vs的终端中输入npm start 来启动项目3&#xff1a;删除src目录中的干扰项4&#xff1a;去掉index.js中的严格模式节点JSX介绍JSX中使用js表达式原生js调用三元运算符列表渲染条件渲染三元表达式逻辑&&运算 分支逻辑类名…

Setting up SSH Host ...问题解决

一、问题可能原因&#xff1a; 网速问题导致下载过慢&#xff0c;超时 二、解决方式&#xff1a;手动下载安装 1、确定VSCode commit id&#xff0c;如下图所示 2、拼接请求&#xff0c;下载vscode server包 Arm&#xff1a;https://update.code.visualstudio.com/commit:换…

【AUTOSAR】【通信安全】CRC

目录 一、概述 二、功能说明 2.1 通用行为 2.2 8位CRC计算 2.2.1 8位SAE J1850 CRC计算 2.2.2 8位0x2F多项式CRC计算 2.3 16位CRC计算 2.3.1 16位CCITT-FALSE CRC16 2.3.2 16位0x8005多项式CRC计算 2.4 32位CRC计算 2.4.1 32位以太网CRC计算 2.4.2 32位0xF4ACFB13多…

AIGC产业研究报告 2023——图像生成篇

易观&#xff1a;今年以来&#xff0c;随着人工智能技术不断实现突破迭代&#xff0c;生成式AI的话题多次成为热门&#xff0c;而人工智能内容生成&#xff08;AIGC&#xff09;的产业发展、市场反应与相应监管要求也受到了广泛关注。为了更好地探寻其在各行业落地应用的可行性…

jvm之常用命令行工具

写在前面 本文已起看下给我们的Java程序看病常用到的工具都有哪些&#xff0c;通过工具得到指标&#xff0c;通过指标分析病情&#xff0c;从而给出对应的治疗方案。 1&#xff1a;jps/jinfo 用来获取运行的jvm进程信息&#xff0c;一般我们使用该命令来获取进程号&#xff…

CTF权威指南 笔记 -第二章二进制文件- 2.4 -动态链接

目录 静态文件的缺点 动态链接 位置无关代码 延迟绑定 _dl_runtime_reslove 函数定义 深入审视 静态文件的缺点 随着可执行文件的增加 静态链接带来的浪费空间问题就会愈发严重 如果大部分可执行文件都需要glibc 那么在链接的时候就需要把 libc.a链接进去 如果一个libc…

Spark大数据处理讲课笔记3.6 RDD容错机制

文章目录 零、本讲学习目标一、RDD容错机制&#xff08;一&#xff09;血统方式&#xff08;二&#xff09;设置检查点方式 二、RDD检查点&#xff08;一&#xff09;RDD检查点机制&#xff08;二&#xff09;与RDD持久化的区别&#xff08;三&#xff09;RDD检查点案例演示 三…

Matlab 多项式拟合

一、线性 1、多项式 corrcoef函数 corrcoef函数用来计算矩阵相关系数。 (1)、corrcoef(x)&#xff1a;若x为一个矩阵&#xff0c;返回的则是一个相关系数矩阵。 (2)、corrcoef(x,y)&#xff1a;计算列向量x、y的相关系数&#xff0c;要求x、y具有相等的元素个数。如果x、y是矩…