-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdetect-capital.js
More file actions
59 lines (55 loc) · 1.3 KB
/
detect-capital.js
File metadata and controls
59 lines (55 loc) · 1.3 KB
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
/**
* @param {string} word
* @return {boolean}
* Time O(n) - where n is the number of chars in word
* Space O(1)
*/
var detectCapitalUse = function (word) {
let left = 0;
let right = word.length - 1;
const leftLetter = word[left];
const rightLetter = word[right];
if (
leftLetter === leftLetter.toLowerCase() &&
rightLetter === rightLetter.toUpperCase()
)
return false;
//check for uppercase
if (
leftLetter === leftLetter.toUpperCase() &&
rightLetter === rightLetter.toUpperCase()
) {
return allLowerOrAllUpper(word.slice(left + 1, right), true);
} else {
// otherwise we check that all letters are lowercase
return allLowerOrAllUpper(word.slice(left + 1, right), false);
}
};
function allLowerOrAllUpper(string, upper) {
let left = 0;
let right = string.length - 1;
while (left <= right) {
if (upper) {
if (
string[left] !== string[left].toUpperCase() ||
string[right] !== string[right].toUpperCase()
) {
return false;
} else {
left++;
right--;
}
} else {
if (
string[left] !== string[left].toLowerCase() ||
string[right] !== string[right].toLowerCase()
) {
return false;
} else {
left++;
right--;
}
}
}
return true;
}