Note:

1. 0 could be 10 but not valid for 01. Check edge cases.

2. No number shoud be there as num reduced.

class Solution {
    public boolean validWordAbbreviation(String word, String abbr) {
        if (abbr.length() > word.length()) return false;
        int runner = 0, i = 0, star = 0;
        for (; i < word.length(); i++) {
            if (star == 0) {
                while (runner < abbr.length() && abbr.charAt(runner) >= '0' && abbr.charAt(runner) <= '9') {
                    if (star == 0 && abbr.charAt(runner) == '0') return false;
                    star = star * 10 + (int)(abbr.charAt(runner++) - '0');
                }
            }
            
            if (star > 0) star--;
            else if (runner < abbr.length() && word.charAt(i) == abbr.charAt(runner)) runner++;
            else return false;
        }
        
        return i == word.length() && runner == abbr.length() && star == 0;
    }
}

 

posted on 2017-10-08 15:40  keepshuatishuati  阅读(142)  评论(0编辑  收藏  举报