LeetCode刷题指南-JS中字符串常见操作
前言
今天闲来无事做算法题的时候心血来潮决定拿JavaScript来实现,习惯用Java的我,被JavaScript语法细节及字符串操作狠狠的上了一课,特以此篇文章来记录我的耻辱时刻。😥
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/
看到这道题我们的第一想法是直接暴力枚举整个二进制字符串,寻找到符合题目要求的情况,然后再找出最大值。 代码如下:
/**
* @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中字符串有所帮助,本人水平有限难免会有纰漏,欢迎大家指正。如觉得这篇文章对你有帮助的话,欢迎点赞收藏加关注,感谢支持🌹🌹。
转载自:https://juejin.cn/post/7366192987553153074