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