Valid Word Abbreviation
생각보다 함정이 많아서 문제의 조건을 꼼꼼하게 따져서 하나 씩 검사해야 한다.
- 요약어의 숫자가 0으로 시작하면 안됨
- 요약 숫자 개수만큼만 스킵해야 함
- 요약어와 단어가 정확히 매칭되어야 함
세 가지 조건에 주의하면서 구현하면 다음과 같다.
bool validWordAbbreviation(string word, string abbr) {
int wi = 0, ai = 0;
while (wi < word.size() && ai < abbr.size()) {
if (word[wi] == abbr[ai]) {
wi++, ai++;
continue;
}
if (!isdigit(abbr[ai])) return false;
string number = "";
while (ai < abbr.size() && isdigit(abbr[ai])) {
number += abbr[ai++];
}
// 1.
if (number.size() > 0 && number[0] == '0') return false;
int count = stoi(number);
// 2.
if (wi + count > word.size()) return false;
wi += count;
}
// 3.
return (wi == word.size() && ai == abbr.size());
}