美文网首页
408. Valid Word Abbreviation

408. Valid Word Abbreviation

作者: Nancyberry | 来源:发表于2018-05-26 03:55 被阅读0次

    Description

    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.

    Solution

    Two-pointer, O(n), S(1)

    简单题,但是testcase有点坑,并没有保证abbr一定是合法的,例如:
    "a"
    "0a"
    需要return false...

    class Solution {
        public boolean validWordAbbreviation(String word, String abbr) {
            if (word == null || abbr == null) {
                return false;
            }
            
            int i = 0;
            int j = 0;
            int m = word.length();
            int n = abbr.length();
            
            while (j < n && i < m) {
                char c = abbr.charAt(j);
                
                if (Character.isLetter(c)) {
                    if (word.charAt(i++) != abbr.charAt(j++)) {
                        return false;
                    }
                } else {
                    if (c == '0') { // leading 0 is invalid
                        return false;
                    }
                    
                    int num = 0;
                    while (j < n && Character.isDigit(abbr.charAt(j))) {
                        num = 10 * num + abbr.charAt(j++) - '0';
                    }
                    
                    i += num;
                }
            }
            
            return j == n && i == m;
        }
    }
    

    相关文章

      网友评论

          本文标题:408. Valid Word Abbreviation

          本文链接:https://www.haomeiwen.com/subject/itmpjftx.html