统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
输入: “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 提交记录