• Time:O(n)
• Space:O(1)

## C++

``````class Solution {
public:
bool validWordAbbreviation(const string& word, const string& abbr) {
int i = 0;  // word's index
int j = 0;  // abbr's index

while (i < word.length() && j < abbr.length()) {
if (word[i] == abbr[j]) {
++i;
++j;
continue;
}
if (abbr[j] <= '0' || abbr[j] > '9')
return false;
int num = 0;
while (j < abbr.length() && isdigit(abbr[j])) {
num = num * 10 + abbr[j] - '0';
++j;
}
i += num;
}

return i == word.length() && j == abbr.length();
}
};
``````

## JAVA

``````class Solution {
public boolean validWordAbbreviation(String word, String abbr) {
int i = 0; // word's index
int j = 0; // abbr's index

while (i < word.length() && j < abbr.length()) {
if (word.charAt(i) == abbr.charAt(j)) {
++i;
++j;
continue;
}
if (abbr.charAt(j) <= '0' || abbr.charAt(j) > '9')
return false;
int num = 0;
while (j < abbr.length() && Character.isDigit(abbr.charAt(j))) {
num = num * 10 + abbr.charAt(j) - '0';
++j;
}
i += num;
}

return i == word.length() && j == abbr.length();
}
}
``````