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.
public class Solution { public boolean validWordAbbreviation(String word, String abbr) { if(word.length() == 0 && abbr.length()== 0) return true; if(word.length() == 0 || abbr.length()== 0) return false; if(abbr.charAt(0) == '0') return false; // edge case a -> 01 int cur = 0; int point = 0; for(int i = 0 ; i < abbr.length() ; i++){ char temp = abbr.charAt(i); if(Character.isDigit(temp)) { cur = cur * 10 + temp - '0'; if(cur == 0) return false; //edge case hi -> h01 } if(temp >= 'a' && temp <= 'z'){ point = point + cur; if(point >= word.length()) return false; if(abbr.charAt(i) == word.charAt(point)){ point ++; cur = 0; } else return false; } } if(cur != 0) point = point+ cur; //edge case "inter" -> "inte1" return point == word.length(); } }