1. 程式人生 > >【JS】字串中的單詞數 #字串 Easy

【JS】字串中的單詞數 #字串 Easy

統計字串中的單詞個數,這裡的單詞指的是連續的不是空格的字元。

請注意,你可以假定字串裡不包括任何不可列印的字元。

輸入: “Hello, my name is John” , 輸出: 5
輸入:var m = “, , , , a, eaefa” ,輸出: 6


解法一:

統計字元與空格之間有多少次隔斷就可以了

var countSegments = function(s) {

    var status=0, s=s+' ' count=0, len=s.length

    for(var i=0;i<len;i++){
        if(s[i]!=' '){
            status=1
        }else{ 
           if(status==1) count+=1
            status=0
        }
    }

    return count;
}

執行用時:68 ms
已經戰勝 77.17 % 的 javascript 提交記錄

or

解法1.1:

如果字元是連續的,那麼在迴圈時 ,i 可以不斷的跳過

var countSegments = function(s) {

    var status=0, s=s+' ' ,count=0, len=s.length

    for(var i=0;i<len;i++){
        if(s[i]!=' '){
            if(s[i+1]!=' ') i+=1
            status=1
        }else{ 
            
           if(status==1) count+=1
            status=0
        }
    }

    return count;
}

執行用時:64 ms
已經戰勝 91.30 % 的 javascript 提交記錄


解法二:

用正則代替遍歷

大概思路是用一個不會出現的字元如漢字代替空格,然後統計字串長度 L1

再把漢字刪除,統計字串長度 L2

返回 L1 減 L2

var countSegments = function(s) {
    s=s.replace(/\s+/g,"中")
    var l1=s.length
    
    if(s[0]!='中' && s[s.length-1]!='中') {
        l1+=1
    }else if(s[0]=='中' && s[s.length-1]=='中') {
        l1-=1
    }

    s=s.replace(/[中]/g,"")
    var l2=s.length

    return l2==0? 0:l1-l2;
}

執行用時:60 ms
已經戰勝 97.83 % 的 javascript 提交記錄