Given a non-empty string s
and an abbreviation abbr
, 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:
Assume s
contains only lowercase letters and abbr
contains only lowercase letters and digits.
Example 1:
Given s = "internationalization", abbr = "i12iz4n": Return true.
Example 2:
Given s = "apple", abbr = "a2e":
Return false. 是时候该总结一下string类的问题了由Easy到hard这道题有几个可以学到的点:第一:在string中判断是否为数字我自己写代码的时候用的isdigit()函数,碰到多位数的时候从最后加好的string变为int,我们还可以用 if(str[i] >= 0 && str[i] <= 9)来判断,转化成int的时候也可以直接使用str[i] - ‘0‘来转换。第二:增加位数的时候可以用cnt = 10*cnt + str[i] - ‘0‘来更新 这种方法很常见 来看代码:
bool validWordAbbreviation(string word, string abbr) { int pt1 = 0, pt2 = 0; while(pt1 < word.size() && pt2 < abbr.size()) { if(‘0‘ <= abbr[pt2] && abbr[pt2] <= ‘9‘) { if(abbr[pt2] == ‘0‘) return false; int value = 0; while(pt2 < abbr.size() && ‘0‘ <= abbr[pt2] && abbr[pt2] <= ‘9‘) { value = value*10 + abbr[pt2]-‘0‘; pt2++; } pt1 += value; } else { if(word[pt1++] != abbr[pt2++]) return false; } } return pt1 == word.size() && pt2 == abbr.size(); }
时间: 2024-10-26 21:21:48