1. 程式人生 > >【Leetcode】408. Valid Word Abbreviation

【Leetcode】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.

思路:
easy 要注意兩點:1。連續的digit要組合為一個number 2。number不能有前導0,且number不為0

演算法:

    public boolean validWordAbbreviation(String word, String abbr) {
        int i = 0, j = 0, start = -1;

        while (i < word
.length() && j < abbr.length()) { if (Character.isDigit(abbr.charAt(j))) { if (start == -1) { start = j; if (abbr.charAt(j) - '0' == 0){ return false; } } if
(j == abbr.length() - 1) { int num = Integer.parseInt(abbr.substring(start, j + 1)); i += num; } j++; } else { if (start != -1) { int num = Integer.parseInt(abbr.substring(start, j)); i += num; start = -1; } else { if (word.charAt(i) == abbr.charAt(j)) { i++; j++; } else { return false; } } } } if (i == word.length() && j == abbr.length()) return true; else return false; }