首頁 >web前端 >js教程 >javascript中字串的應用(程式碼)

javascript中字串的應用(程式碼)

不言
不言原創
2018-09-07 15:06:351486瀏覽

字串在javascript中是非常重要的知識點之一,這篇文章給大家列出了很多的例子,可以看一看,鍛鍊自己的能力。

讓自己更熟悉各個api的使用。以下是javascript版本的leetcode題目(字串入門題組)解法。

1.反轉字串

說明

寫一個函數,其作用是將輸入的字串反轉過來。

範例1:

输入: "hello"
输出: "olleh"

範例2:

输入: "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('')
};

點評

常見寫法,轉為數組,翻轉,變回來。

2.顛倒整數

說明

給定一個 32 位元有符號整數,將整數中的數字反轉。

注意:
 假設我們的環境只能儲存 32 位元有符號整數,其數值範圍是 [−231,  231 − 1]。根據這個假設,如果反轉後的整數溢出,則傳回 0。

範例1:

输入: 123
输出: 321

範例2:

输入: -123
输出: -321

範例3:

输入: 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(&#39;-&#39;+(Math.abs(x)+&#39;&#39;).split(&#39;&#39;).reverse().join(&#39;&#39;))
    }else{
       _num =  Number(((x)+&#39;&#39;).split(&#39;&#39;).reverse().join(&#39;&#39;))
    }
    if(_num>_max || _num<_min){
        return 0;   
    }else{
        return _num
    }
};

點評

#看上去跟第一題沒什麼差別。轉為字串,翻轉,變成數值。裡面需要處理的就是越界以及正負數的問題

3.字串中的第一個唯一字元

說明

給定一個字串,找到它的第一個不重複的字符,並返回它的索引。如果不存在,則傳回 -1。
 注意:
 您可以假定該字串只包含小寫字母。

案例1:

s = "leetcode"
返回 0.

案例2:

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。

4.有效的字母異位詞

說明

給定兩個字串s 和t ,寫一個函數來判斷t 是否是s 的一個字母異位詞。

說明:
 你可以假設字串只包含小寫字母。

進階:
 如果輸入字串包含 unicode 字元怎麼辦?你能否調整你的解法來應對這種情況?

範例1:

输入: s = "anagram", t = "nagaram"
输出: true

範例2:

输入: 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;
};

點評

這個就是透過計數,然後判斷是否元素都一樣多。

5.驗證回文字串

說明

給定一個字串,驗證它是否是回文串,只考慮字母和數字字符,可以忽略字母的大小寫。

說明:
 本題中,我們將空字串定義為有效的回文字串。

範例1:

输入: "A man, a plan, a canal: Panama"
输出: true

範例2:

输入: "race a car"
输出: false

方案

/**
 * @param {string} s
 * @return {boolean}
 */
var isPalindrome = function(s) {
    var _s = s.replace(/[^a-z0-9]/gi,&#39;&#39;).toLowerCase();
    return _s.split(&#39;&#39;).reverse().join(&#39;&#39;) == _s
};

點評

透過正規把不要的字元都刪掉,轉化為小寫,翻轉比對。

6.字串轉整數(atoi)

說明

實作 atoi,將字串轉為整數。

在找到第一個非空字元之前,需要移除字串中的空格字元。如果第一個非空字元是正號或負號,選取該符號,並將其與後面盡可能多的連續的數字組合起來,這部分字元即為整數的值。如果第一個非空字元是數字,則直接將其與之後連續的數字字元組合起來,形成整數。

字串可以在形成整數的字元後麵包括多餘的字符,這些字符可以被忽略,它們對於函數沒有影響。

當字串中的第一個非空字元序列不是個有效的整數;或字串為空;或字串僅包含空白字元時,則不進行轉換。

如果函數不能執行有效的轉換,則回傳 0。

說明:
假設我們的環境只能儲存 32 位元有符號整數,其數值範圍為 [−231,  231 − 1]。如果數值超過可表示的範圍,則傳回  INT_MAX (231 − 1) 或 INT_MIN (−231) 。

範例1:

输入: "42"
输出: 42

範例2:

输入: "   -42"
输出: -42
解释: 第一个非空白字符为 &#39;-&#39;, 它是一个负号。
     我们尽可能将负号与后面所有连续出现的数字组合起来,最后得到 -42 。

範例3:

输入: "4193 with words"
输出: 4193
解释: 转换截止于数字 &#39;3&#39; ,因为它的下一个字符不为数字。

範例4:

输入: "words and 987"
输出: 0
解释: 第一个非空字符是 &#39;w&#39;, 但它不是数字或正、负号。
     因此无法执行有效的转换。

範例5

输入: "-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

##7.實作strStr()

說明

給定一個haystack 字串和一個needle 字串,在haystack 字串中找出needle 字串出現的第一個位置(從0開始)。如果不存在,則傳回  -1。

說明:

 當 needle 是空字串時,我們該回傳什麼值呢?這是一個在面試中很好的問題。
 對於本題而言,當 needle 是空字串時我們應當回傳 0 。這與C語言的 strstr() 以及 Java的 indexOf() 定義相符。

範例1:

输入: haystack = "hello", needle = "ll"
输出: 2

範例2:

输入: haystack = "aaaaa", needle = "bba"
输出: -1

方案

/**
 * @param {string} haystack
 * @param {string} needle
 * @return {number}
 */
var strStr = function(haystack, needle) {
    return haystack.indexOf(needle)
};

點評

也沒什麼說的吧,正規或

indexOf都可以實現

8.數數並說

說明

#報數序列是指一個整數序列,按照其中的整數的順序進行報數,得到下一個數。其前五項如下:

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
输出: "1"

示例 2:

输入: 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
};

点评

我的想法是选出连续的同字符,然后把该字符串变成长度加字符,再拼回去

9. 最长公共前缀

说明

编写一个函数来查找字符串数组中的最长公共前缀。
 如果不存在公共前缀,返回空字符串 ""。

说明:
 所有输入只包含小写字母 a-z 。

示例 1:

输入: ["flower","flow","flight"]
输出: "fl"

示例 2:

输入: ["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中的字符串操作

JavaScript计算字符串中每个字符出现的次数

以上是javascript中字串的應用(程式碼)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn