第六天华为机考练习(JavaScript node)
注:华为机试和剑指offer的JavaScript Node的书写方式不同,剑指offer只需学核心代码然后return,华为机试需要自写输入输出,输出console就行。
1.leetcode 434.字符串中的单词数
https://leetcode.cn/problems/number-of-segments-in-a-string/
统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符。
请注意,你可以假定字符串里不包括任何不可打印的字符。
/**
* @param {string} s
* @return {number}
*/
var countSegments = function(s) {
let str=s.trim()
if(!str){
return 0
}
let arr=str.split(/[ ]+/)
return arr.length
};
2.leetcode 2047. 句子中的有效单词数
https://leetcode.cn/problems/number-of-valid-words-in-a-sentence/
句子仅由小写字母('a' 到 'z')、数字('0' 到 '9')、连字符('-')、标点符号('!'、'.' 和 ',')以及空格(' ')组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。
如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:
仅由小写字母、连字符和/或标点(不含数字)组成。
至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有效单词,但 "-ab" 和 "ab-" 不是有效单词)。
至多一个 标点符号。如果存在,标点符号应当位于 token 的 末尾 。
这里给出几个有效单词的例子:"a-b."、"afad"、"ba-c"、"a!" 和 "!" 。
给你一个字符串 sentence ,请你找出并返回 sentence 中 有效单词的数目 。
/**
* @param {string} sentence
* @return {number}
*/
var countValidWords = function(sentence) {
let usearr = []
let arr = sentence.trim().split(/[ ]+/)
for (let i = 0; i < arr.length; i++) {
if (arr[i].length > 2 && /^[a-z]+[-]?[a-z]+[,.!]?$/.test(arr[i])) {
usearr.push(arr[i])
} else if (arr[i].length === 1 && /^[a-z.,!]/.test(arr[i])) {
usearr.push(arr[i])
} else if (arr[i].length === 2 && /^[a-z][a-z,.!]$/.test(arr[i])) {
usearr.push(arr[i])
}
}
return usearr.length
};
3.leetcode 581:最短无序连续子数组
https://leetcode.cn/problems/shortest-unsorted-continuous-subarray/
给你一个整数数组 nums ,你需要找出一个 连续子数组 ,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序。
请你找出符合题意的 最短 子数组,并输出它的长度。
/**
* @param {number[]} nums
* @return {number}
*/
var findUnsortedSubarray = function(nums) {
let sortnums = [...nums]
let left = 0;
let right = nums.length - 1
let lflag=false
let rflag=false
sortnums.sort((a, b) => a - b)
if(nums.length===1) return 0
for (let i = 0; i < nums.length-1; i++) {
if(sortnums[i] === nums[i]&&!lflag){
left+=1
}else{lflag=true}
if(sortnums[nums.length - 1 - i] === nums[nums.length - 1 - i]&&!rflag){
right-=1
}else{rflag=true}
if(rflag&&lflag) break
}
return right>left ? right - left +1:0
};
每天练习算法题针对华为机考


查看14道真题和解析