Expressive Words LeetCode solution in Java

1
class Solution {
2
private String getFreqString(String s) {
3
int len = s.length();
4
StringBuilder freqString = new StringBuilder();
5
int currFreq = 1;
6
char prevChar = s.charAt(0);
7
freqString.append(s.charAt(0));
8
for (int i = 1; i < len; i++) {
9
if (s.charAt(i) == prevChar) {
10
currFreq++;
11
} else {
12
freqString.append(currFreq);
13
freqString.append(s.charAt(i));
14
currFreq = 1;
15
}
16
prevChar = s.charAt(i);
17
}
18

19
if (currFreq > 0) {
20
freqString.append(currFreq);
21
}
22

23
return freqString.toString();
24
}
25

26
private boolean isGreaterButLessThanThree(char sChar, char wChar) {
27
return sChar > wChar && sChar < '3';
28
}
29

30
private boolean isStretchy(String s, String word) {
31
int sLen = s.length();
32
int wordLen = word.length();
33

34
if (sLen != wordLen) {
35
return false;
36
}
37

38
for (int i = 0; i < sLen; i++) {
39
char sChar = s.charAt(i);
40
char wChar = word.charAt(i);
41
if (i % 2 != 0) {
42
if (sChar < wChar) {
43
return false;
44
}
45
if (isGreaterButLessThanThree(sChar, wChar)) {
46
return false;
47
}
48

49
} else if (sChar != wChar) {
50
return false;
51
}
52
}
53

54
return true;
55
}
56

57
public int expressiveWords(String s, String[] words) {
58
int wordLen = words.length;
59
if (wordLen < 1 || s.length() < 1) {
60
return 0;
61
}
62

63
int stretchyWords = 0;
64
String freqStringS = getFreqString(s);
65
for (String word : words) {
66
String freqStringWord = getFreqString(word);
67
if (isStretchy(freqStringS, freqStringWord)) {
68
stretchyWords++;
69
}
70
}
71
return stretchyWords;
72
}
73
}

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0