likes
comments
collection
share

LeetCode刷题指南-JS中字符串常见操作

作者站长头像
站长
· 阅读数 24

前言

今天闲来无事做算法题的时候心血来潮决定拿JavaScript来实现,习惯用Java的我,被JavaScript语法细节及字符串操作狠狠的上了一课,特以此篇文章来记录我的耻辱时刻。😥

LeetCode刷题指南-JS中字符串常见操作

1.获取字符串长度

JavaScript内置有length方法,可以使用内置属性 length 来计算字符串的长度:

let str1 = "Hello World";
console.log(str1.length); // 输出11

2.获取指定位置的值

在JavaScript中,你可以通过字符串的下标索引来获取指定位置的字符。字符串的下标索引从 0 开始,表示字符串中的每个字符位置。

你可以使用以下两种方式来获取字符串指定下标的值:

方法一:方括号 [] 访问

let str = "Hello";
let charAtIndex2 = str[2]; // 获取索引为 2 的字符,结果为 "l"

方法二:charAt()方法

let str = "Hello";
let charAtIndex2 = str.charAt(2); // 获取索引为 2 的字符,结果为 "l"

3.字符串拼接

方法一:使用加号 (+) 运算符

let str1 = "Hello";
let str2 = "World"; 
let result = str1 + " " + str2; // "Hello World"

方法二:模板字符串(Template literals)

使用反引号 ( `` ) 来定义模板字符串,可以在其中嵌入变量或表达式,通过 ${} 将其插入到字符串中:

let str1 = "Hello"; 
let str2 = "World";
let result = `${str1} ${str2}`; // "Hello World"

方法三:使用 concat() 方法

concat() 方法用于连接两个或多个字符串,并返回一个新的字符串,原始字符串不会被修改:

let str1 = "Hello"; 
let str2 = "World"; 
let result = str1.concat(" ", str2); // "Hello World"

方法四: join() 方法(对数组进行字符串连接

let strings = ["Hello", "World"]; 
let result = strings.join(" "); // "Hello World"

4.分割字符串为数组

在JavaScript中,你可以使用 split() 方法将字符串分割为数组。split() 方法接受一个分隔符作为参数,并根据该分隔符将字符串分割成一个字符串数组。

示例:

let str = "apple,banana,orange";
let arr = str.split(","); // 使用逗号作为分隔符分割字符串
console.log(arr); // ["apple", "banana", "orange"]

在上面的例子中,字符串 str 被逗号 , 分隔为三个部分,然后存储在数组 arr 中。

如果不提供任何参数给 split() 方法,它将默认使用空格作为分隔符,将字符串分割成单词数组:

let sentence = "Hello world";
let words = sentence.split(); // 默认使用空格分割字符串
console.log(words); // ["Hello", "world"]

你还可以传递一个空字符串 "" 作为分隔符,这样将会把字符串的每一个字符都分割为数组的一个元素:

let str = "Hello";
let characters = str.split(""); // 将每个字符分割成一个数组元素
console.log(characters); // ["H", "e", "l", "l", "o"]

5.截取字符串

方法一:substring()方法

substring() 方法接受两个参数,分别是截取的起始位置和结束位置(可选)。它返回一个新的字符串,包含从起始位置到结束位置(不包括结束位置 可理解为左闭右开)的子字符串。

let str = "Hello world"; 
let subStr = str.substring(0, 5); // 从索引 0 开始截取,到索引 5 之前结束 
console.log(subStr); // "Hello"

方法二: slice()方法

slice() 方法与 substring() 类似,也接受两个参数,分别是截取的起始位置和结束位置(可选)。它返回一个新的字符串,包含从起始位置到结束位置(不包括结束位置)的子字符串。与 substring() 不同的是,slice() 方法允许使用负数作为索引,表示从字符串末尾开始计算位置。

let str = "Hello world";
let subStr = str.slice(0, 5); // 从索引 0 开始截取,到索引 5 之前结束
console.log(subStr); // "Hello"

方法三:substr()方法

substr() 方法接受两个参数,分别是截取的起始位置和要截取的字符数。它返回一个新的字符串,从起始位置开始,包含指定数量的字符。

let str = "Hello world";
let subStr = str.substr(0, 5); // 从索引 0 开始截取,截取 5 个字符 
console.log(subStr); // "Hello"

6. 字符串大小写转换

转换为大写

使用 toUpperCase() 方法将字符串中的所有字符转换为大写。

let str = "hello world"; 
let upperCaseStr = str.toUpperCase();
console.log(upperCaseStr); // 输出 "HELLO WORLD"

转换为小写

使用 toLowerCase() 方法将字符串中的所有字符转换为小写。

 
    javascriptCopy Code
    let str = "HELLO WORLD";
    let lowerCaseStr = str.toLowerCase();
    console.log(lowerCaseStr); // 输出 "hello world"

7. 清除字符串收尾空白符

清除开头和结尾的空白字符

使用 trim() 方法可以清除字符串开头和结尾的空白字符(空格、制表符、换行符等)。

javascriptCopy Code
let str = "   hello world   ";
let trimmedStr = str.trim();
console.log(trimmedStr); // 输出 "hello world"

清除所有空白字符

使用正则表达式来匹配并替换所有空白字符。

javascriptCopy Code
let str = "  hello   world  ";
let trimmedStr = str.replace(/\s+/g, ''); // 使用正则表达式 /\s+/g 匹配所有空白字符,并替换为空字符串
console.log(trimmedStr); // 输出 "helloworld"

8. 将字符串转化为数字

parseInt()函数

parseInt() 函数将字符串转换为整数。它从字符串的开头开始解析字符,直到遇到无法转换为数字的字符为止,然后返回已解析的整数部分。

```
javascriptCopy Code
let str = "123";
let num = parseInt(str);
console.log(num); // 输出 123
```

parseFloat()函数

parseFloat() 函数将字符串转换为浮点数。它与 parseInt() 类似,但是可以解析包含小数点的字符串。

  javascriptCopy Code
  let str = "3.14";
  let num = parseFloat(str);
  console.log(num); // 输出 3.14

Number()函数

Number() 函数可以将字符串、布尔值、数组、对象等转换为数字。它比较灵活,能够处理不同类型的输入,并尝试将其转换为数字。

   javascriptCopy Code
   let str = "42";
   let num = Number(str);
   console.log(num); // 输出 42

思考

以上这些内容便是JavaScript中字符串操作中最常用的一些方法,那么有了上面的基础之后,大家来看一道LeetCode算法题。 原题链接:https://leetcode.cn/problems/binary-gap/

LeetCode刷题指南-JS中字符串常见操作

看到这道题我们的第一想法是直接暴力枚举整个二进制字符串,寻找到符合题目要求的情况,然后再找出最大值。 代码如下:

/**
 * @param {number} n
 * @return {number}
 */
var binaryGap = function(n) {
    let str = "";
    while (n > 0){
        str += n % 2;
        n = Math.floor(n / 2);
    }
    let max = 0;
    for (let i = 0 ; i < str.length ; i++){
        if  (str[i] == '1'){
            for (let j = i + 1 ; j < str.length ; j++){
                if (str[j] != '0'){
                    max = Math.max(j - i ,max);
                    break;
                }
            }
        }
    }
    return max;
};

暴力方法中,主要用到了上文所提到的如何获取字符串指定索引位置的值,使用暴力枚举整个字符串找到符合题目要求的两个1,最后再利用Math.max方法求出最大的长度,此题的暴力解法就算是完成了,算法厉害的大佬们可以想想有没有什么方法来优化该算法😄。

本篇文章就到此为止啦,希望通过这篇文章能对你理解JavaScript中字符串有所帮助,本人水平有限难免会有纰漏,欢迎大家指正。如觉得这篇文章对你有帮助的话,欢迎点赞收藏加关注,感谢支持🌹🌹。

LeetCode刷题指南-JS中字符串常见操作

转载自:https://juejin.cn/post/7366192987553153074
评论
请登录