Valid Word Abbreviation
Given anon-emptystrings
and an abbreviationabbr
, return whether the string matches with the given abbreviation.
A string such as"word"
contains only the following valid abbreviations:
["word", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", "1o1d", "1or1", "w1r1", "1o2", "2r1", "3d", "w3", "4"]
Notice that only the above abbreviations are valid abbreviations of the string"word"
. Any other string is not a valid abbreviation of"word"
.
Note:
Assumes
contains only lowercase letters andabbr
contains only lowercase letters and digits.
Example 1:
Given
s
= "internationalization",
abbr
= "i12iz4n":
Return true.
Example 2:
Given
s
= "apple",
abbr
= "a2e":
Return false.
Analysis
Easy题,但是有许多实现细节容易出问题。
用
Character.isDigit(t[j])
来检测是否为数字数字字符到数字的转换
while嵌套while循环要注意内层循环中的指针不要越界
Solution
class Solution {
public boolean validWordAbbreviation(String word, String abbr) {
if (word == null || abbr == null) {
return false;
}
int i = 0, j = 0;
int wordLength = word.length();
int abbrLength = abbr.length();
char[] s = word.toCharArray();
char[] t = abbr.toCharArray();
while (i < wordLength && j < abbrLength) {
if (Character.isDigit(t[j])) {
if (t[j] == '0') {
return false;
}
int val = 0;
while (j < abbrLength && Character.isDigit(t[j])) {
val = val * 10 + (t[j] - '0');
j++;
}
i += val;
} else {
if (s[i] != t[j]) {
return false;
}
i++;
j++;
}
}
return i == wordLength && j == abbrLength;
}
}
Reference
Last updated
Was this helpful?