字串在javascript中是非常重要的知識點之一,這篇文章給大家列出了很多的例子,可以看一看,鍛鍊自己的能力。
讓自己更熟悉各個api的使用。以下是javascript版本的leetcode題目(字串入門題組)解法。
1.反轉字串
說明
寫一個函數,其作用是將輸入的字串反轉過來。
範例1:
範例2:
1 2 | 输入: "A man, a plan, a canal: Panama"
输出: "amanaP :lanac a ,nalp a ,nam A"
|
登入後複製
實作
1 2 3 4 5 6 7 |
var reverseString = function (s) {
return s.split( '' ).reverse().join( '' )
};
|
登入後複製
點評
常見寫法,轉為數組,翻轉,變回來。
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
}
};
|
登入後複製
點評
#看上去跟第一題沒什麼差別。轉為字串,翻轉,變成數值。裡面需要處理的就是越界以及正負數的問題
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
};
|
登入後複製
點評
解法不是很好,會導致遍歷很多次,想法就是前後找,如果index
一致就證明沒重複
最快的方法當然是把目前的存在map
裡面,然後計數,再遍歷一遍map
就ok。
4.有效的字母異位詞
說明
給定兩個字串s 和t ,寫一個函數來判斷t 是否是s 的一個字母異位詞。
說明:
你可以假設字串只包含小寫字母。
進階:
如果輸入字串包含 unicode 字元怎麼辦?你能否調整你的解法來應對這種情況?
範例1:
1 2 | 输入: s = "anagram" , t = "nagaram"
输出: true
|
登入後複製
範例2:
1 2 | 输入: s = "rat" , t = "car"
输出: false
|
登入後複製
方案
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;
};
|
登入後複製
點評
這個就是透過計數,然後判斷是否元素都一樣多。
5.驗證回文字串
說明
給定一個字串,驗證它是否是回文串,只考慮字母和數字字符,可以忽略字母的大小寫。
說明:
本題中,我們將空字串定義為有效的回文字串。
範例1:
1 2 | 输入: "A man, a plan, a canal: Panama"
输出: true
|
登入後複製
範例2:
1 2 | 输入: "race a car"
输出: false
|
登入後複製
方案
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
};
|
登入後複製
點評
透過正規把不要的字元都刪掉,轉化為小寫,翻轉比對。
6.字串轉整數(atoi)
說明
實作 atoi,將字串轉為整數。
在找到第一個非空字元之前,需要移除字串中的空格字元。如果第一個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。
字串可以在形成整數的字元後麵包括多餘的字符,這些字符可以被忽略,它們對於函數沒有影響。
當字串中的第一個非空字元序列不是個有效的整數;或字串為空;或字串僅包含空白字元時,則不進行轉換。
如果函數不能執行有效的轉換,則回傳 0。
說明:
假設我們的環境只能儲存 32 位元有符號整數,其數值範圍為 [−231, 231 − 1]。如果數值超過可表示的範圍,則傳回 INT_MAX (231 − 1) 或 INT_MIN (−231) 。
範例1:
範例2:
1 2 3 4 | 输入: " -42"
输出: -42
解释: 第一个非空白字符为 '-', 它是一个负号。
我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。
|
登入後複製
範例3:
1 2 3 | 输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 '3' ,因为它的下一个字符不为数字。
|
登入後複製
範例4:
1 2 3 4 | 输入: "words and 987"
输出: 0
解释: 第一个非空字符是 'w', 但它不是数字或正、负号。
因此无法执行有效的转换。
|
登入後複製
範例5
1 2 3 4 | 输入: "-91283472332"
输出: -2147483648
解释: 数字 "-91283472332" 超过 32 位有符号整数范围。
因此返回 INT_MIN (−231) 。
|
登入後複製
方案
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
}
};
|
登入後複製
點評
這個沒什麼好說的,判斷邊界,然後parseInt
##7.實作strStr()
說明
給定一個haystack 字串和一個needle 字串,在haystack 字串中找出needle 字串出現的第一個位置(從0開始)。如果不存在,則傳回 -1。
說明:
當 needle 是空字串時,我們該回傳什麼值呢?這是一個在面試中很好的問題。
對於本題而言,當 needle 是空字串時我們應當回傳 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。
範例1:
1 2 | 输入: haystack = "hello" , needle = "ll"
输出: 2
|
登入後複製
範例2:
1 2 | 输入: haystack = "aaaaa" , needle = "bba"
输出: -1
|
登入後複製
方案
1 2 3 4 5 6 7 8 |
var strStr = function (haystack, needle) {
return haystack.indexOf(needle)
};
|
登入後複製
點評
也沒什麼說的吧,正規或
indexOf都可以實現
8.數數並說
說明
#報數序列是指一個整數序列,按照其中的整數的順序進行報數,得到下一個數。其前五項如下:
1 2 3 4 5 | 1. 1
2. 11
3. 21
4. 1211
5. 111221
|
登入後複製
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
};
|
登入後複製
点评
我的想法是选出连续的同字符,然后把该字符串变成长度加字符,再拼回去
9. 最长公共前缀
说明
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 ""。
说明:
所有输入只包含小写字母 a-z 。
示例 1:
1 2 | 输入: [ "flower" , "flow" , "flight" ]
输出: "fl"
|
登入後複製
示例 2:
1 2 3 | 输入: [ "dog" , "racecar" , "car" ]
输出: ""
解释: 输入不存在公共前缀。
|
登入後複製
方案
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] || ''
};
|
登入後複製
点评
想法是做一个公共前缀数组,遍历,如果有不满足的,就操作这个前缀数组,直到最后,剩下的就是满足的。取最大的一个。
相关推荐:
JavaScript中的字符串操作
JavaScript计算字符串中每个字符出现的次数
以上是javascript中字串的應用(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!