首页 > 代码库 > 408. Valid Word Abbreviation

408. Valid Word Abbreviation

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 = http://www.mamicode.com/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();
    }

 

 




408. Valid Word Abbreviation