408. Valid Word Abbreviation

Problem:
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.
Analysis:
这道题的坑爹程度也只是稍微比isNumber Valid好点儿。注意两点
1. 数如果是有多位要考虑进去比如12
2. 如果遇到0,直接返回false.

Solution:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Solution {
    public boolean validWordAbbreviation(String word, String abbr) {
        if (word == null)
            return abbr == null;
        int  i = 0, j = 0;
        while (i < word.length() && j < abbr.length()) {
            char a = word.charAt(i), b = abbr.charAt(j);
            if (a == b) {
                i++;
                j++;
            } else  if (Character.isDigit(b)) {
                if (b == '0')
                    return false;
                int num = 0;
                while (j < abbr.length() && !Character.isLetter(abbr.charAt(j))) {
                    num = num*10 + (abbr.charAt(j) - '0');
                    j++;
                }
                for (int k = 0; k < num; k++) {
                    i++;
                }
            } else {
                return false;
            }
        }
        
        return i == word.length() && j == abbr.length();
    }
}

评论

此博客中的热门博文

776. Split BST

663. Equal Tree Partition

532. K-diff Pairs in an Array