-
Notifications
You must be signed in to change notification settings - Fork 16
/
ValidWordAbbreviation.java
35 lines (33 loc) · 1.2 KB
/
ValidWordAbbreviation.java
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
// https://leetcode.com/problems/valid-word-abbreviation
// T: O(|word|)
// S: O(1)
public class ValidWordAbbreviation {
public boolean validWordAbbreviation(String word, String abbr) {
if(abbr.length() > word.length()) {
return false;
}
int i = 0, j = 0;
while(i < word.length() && j < abbr.length()) {
final char wc = word.charAt(i), ac = abbr.charAt(j);
// if both characters are different, return false
if(Character.isLetter(ac) && wc != ac) return false;
else{
// encountering a digit
if(Character.isDigit(ac)){
int a = ac - '0';
if(a == 0) return false;
// while we get digits, we create bigger number
while(j + 1 < abbr.length() && Character.isDigit(abbr.charAt(j + 1))){
a = a * 10 + abbr.charAt(j + 1) - '0';
j++;
}
// jump i end of digits position
i += a - 1;
}
}
j++;
i++;
}
return i == word.length() && j == abbr.length();
}
}