-
Notifications
You must be signed in to change notification settings - Fork 4
/
2047.Number_of_Valid_Words_in_a_Sentence.js
68 lines (68 loc) · 1.36 KB
/
2047.Number_of_Valid_Words_in_a_Sentence.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
/**
* @param {string} sentence
* @return {number}
*/
var countValidWords = function (sentence) {
const hyphen = ["-"];
const puncs = ["!", ".", ","];
const lowerChars = [
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
];
// const nums = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
const validChars = [...lowerChars, " ", ...hyphen, ...puncs];
const words = sentence.split(" ").filter((item) => item);
const validWords = words.filter((word) => {
let hyphenValid = true;
let hyphenCount = 0;
let puncValid = true;
let puncCount = 0;
const onlySpecified = word.split("").every((char, idx) => {
if (hyphen.includes(char)) {
hyphenCount++;
const isValid = [word[idx - 1], word[idx + 1]].every((item) =>
lowerChars.includes(item)
);
hyphenValid = isValid;
}
if (puncs.includes(char)) {
puncCount++;
puncValid = idx === word.length - 1;
}
return validChars.includes(char);
});
return (
onlySpecified &&
hyphenCount <= 1 &&
hyphenValid &&
puncCount <= 1 &&
puncValid
);
});
// console.log(validWords);
return validWords.length;
};