字符串在javascript中是非常重要的知识点之一,本篇文章给大家列出了很多的例子,可以看一看,锻炼自己的能力。
让自己更加熟悉各个api的使用。下面是javascript版本的leetcode题目(字符串入门题组)解法。
1.反转字符串
说明
编写一个函数,其作用是将输入的字符串反转过来。
示例 1:
示例 2:
1 2 | 输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"
|
Salin selepas log masuk
实现
1 2 3 4 5 6 7 |
var reverseString = function (s) {
return s.split( '' ).reverse().join( '' )
};
|
Salin selepas log masuk
点评
常见写法,转为数组,翻转,变回来。
2.颠倒整数
说明
给定一个 32 位有符号整数,将整数中的数字进行反转。
注意:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。根据这个假设,如果反转后的整数溢出,则返回 0。
示例 1:
示例 2:
示例 3:
实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
var _min = Math.pow(-2,31)
var _max = Math.pow(2,31)
var reverse = function (x) {
var _num = null;
if (x<0){
_num = Number('-'+(Math. abs (x)+'').split('').reverse().join(''))
} else {
_num = Number(((x)+'').split('').reverse().join(''))
}
if (_num>_max || _num<_min){
return 0;
} else {
return _num
}
};
|
Salin selepas log masuk
点评
看上去和第一题没什么区别。转为字符串,翻转,变成数值。里面需要处理的就是越界以及正负数的问题
3.字符串中的第一个唯一字符
说明
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
注意:
您可以假定该字符串只包含小写字母。
案例1:
案例2:
实现
1 2 3 4 5 6 7 8 9 10 11 12 |
var firstUniqChar = function (s) {
for ( var i = 0 ; i < s.length;i++){
if (s.indexOf(s[i]) == s.lastIndexOf(s[i])){
return i
}
}
return -1
};
|
Salin selepas log masuk
点评
解法不是很好,会导致遍历很多次,想法就是前后找,如果index
一致就证明没重复
最快的方法当然是把当前的存在map
里面,然后计数,再遍历一遍map
就ok。
4.有效的字母异位词
说明
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
示例 1:
1 2 | 输入: s = "anagram" , t = "nagaram"
输出: true
|
Salin selepas log masuk
示例 2:
1 2 | 输入: s = "rat" , t = "car"
输出: false
|
Salin selepas log masuk
方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
var isAnagram = function (s, t) {
var _sArr = {};
var _tArr = {};
if (s.length != t.length) return false;
for ( var i = 0;i<s.length;i++){
if (!_sArr[s[i]]) _sArr[s[i]] = 0;
_sArr[s[i]]++
if (!_tArr[t[i]]) _tArr[t[i]] = 0;
_tArr[t[i]]++
}
for ( var i in _sArr){
if (_sArr[i]!=_tArr[i]){
return false;
}
}
return true;
};
|
Salin selepas log masuk
点评
这个就是通过计数,然后判断是否元素都一样多。
5.验证回文字符串
说明
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
说明:
本题中,我们将空字符串定义为有效的回文串。
示例 1:
1 2 | 输入: "A man, a plan, a canal: Panama"
输出: true
|
Salin selepas log masuk
示例 2:
1 2 | 输入: "race a car"
输出: false
|
Salin selepas log masuk
方案
1 2 3 4 5 6 7 8 |
var isPalindrome = function (s) {
var _s = s.replace(/[^a-z0-9]/gi,'').toLowerCase();
return _s.split('').reverse().join('') == _s
};
|
Salin selepas log masuk
点评
通过正则把不要的字符都删掉,转化为小写,翻转比对。
6.字符串转整数(atoi)
说明
实现 atoi,将字符串转为整数。
在找到第一个非空字符之前,需要移除掉字符串中的空格字符。如果第一个非空字符是正号或负号,选取该符号,并将其与后面尽可能多的连续的数字组合起来,这部分字符即为整数的值。如果第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。
字符串可以在形成整数的字符后面包括多余的字符,这些字符可以被忽略,它们对于函数没有影响。
当字符串中的第一个非空字符序列不是个有效的整数;或字符串为空;或字符串仅包含空白字符时,则不进行转换。
若函数不能执行有效的转换,返回 0。
说明:
假设我们的环境只能存储 32 位有符号整数,其数值范围是 [−231, 231 − 1]。如果数值超过可表示的范围,则返回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
示例 1:
示例 2:
1 2 3 4 | 输入: " -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
|
Salin selepas log masuk
示例 3:
1 2 3 | 输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
|
Salin selepas log masuk
示例 4:
1 2 3 4 | 输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
因此无法执行有效的转换。
|
Salin selepas log masuk
示例 5
1 2 3 4 | 输入: "-91283472332"
输出: -2147483648
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。
|
Salin selepas log masuk
方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var myAtoi = function (str) {
var _num = parseInt(str) || 0
if (_num < (Math.pow(-2,31))){
return (Math.pow(-2,31))
} else if (_num >= (Math.pow(2,31))){
return (Math.pow(2,31)-1)
} else {
return _num
}
};
|
Salin selepas log masuk
点评
这个没什么好说的,判断边界,然后parseInt
7.实现strStr()
说明
给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。
说明:
当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。
对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。
示例 1:
1 2 | 输入: haystack = "hello" , needle = "ll"
输出: 2
|
Salin selepas log masuk
示例 2:
1 2 | 输入: haystack = "aaaaa" , needle = "bba"
输出: -1
|
Salin selepas log masuk
方案
1 2 3 4 5 6 7 8 |
var strStr = function (haystack, needle) {
return haystack.indexOf(needle)
};
|
Salin selepas log masuk
点评
也没什么说的吧,正则或者indexOf
都可以实现
8.数数并说
说明
报数序列是指一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:
1 2 3 4 5 | 1. 1
2. 11
3. 21
4. 1211
5. 111221
|
Salin selepas log masuk
1 被读作 "one 1" ("一个一") , 即 11。
11 被读作 "two 1s" ("两个一"), 即 21。
21 被读作 "one 2", "one 1" ("一个二" , "一个一") , 即 1211。
给定一个正整数 n ,输出报数序列的第 n 项。
注意:整数顺序将表示为一个字符串。
示例 1:
示例 2:
方案
1 2 3 4 5 6 7 8 9 10 11 |
var countAndSay = function (n) {
var _str = '1' ;
for ( var i=1;i<n;i++){
_str = _str.match(/1+|2+|3+|4+|5+|6+|7+|8+|9+/g).map(v=> '' +v.length+v[0]).join( '' );
}
return _str
};
|
Salin selepas log masuk
点评
我的想法是选出连续的同字符,然后把该字符串变成长度加字符,再拼回去
9. 最长公共前缀
说明
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
说明:
所有输入只包含小写字母 a-z 。
示例 1:
1 2 | 输入: [ "flower" , "flow" , "flight" ]
输出: "fl"
|
Salin selepas log masuk
示例 2:
1 2 3 | 输入: [ "dog" , "racecar" , "car" ]
输出: ""
解释: 输入不存在公共前缀。
|
Salin selepas log masuk
方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
var longestCommonPrefix = function (strs) {
var _arr = (strs[0]|| '' ).split( '' ).map((v,i)=>strs[0].slice(0,i+1)).reverse();
for ( var i = 1;i<strs.length;i++){
while (_arr.length){
var _index = strs[i].indexOf(_arr[0]);
if (_index != 0){
_arr.shift()
} else {
break ;
}
}
}
return _arr[0] || ''
};
|
Salin selepas log masuk
点评
想法是做一个公共前缀数组,遍历,如果有不满足的,就操作这个前缀数组,直到最后,剩下的就是满足的。取最大的一个。
相关推荐:
JavaScript中的字符串操作
JavaScript计算字符串中每个字符出现的次数
Atas ialah kandungan terperinci javascript中字符串的应用(代码). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!