Unique Word Abbreviation
An abbreviation of a word follows the form <first letter><number><last letter>. Below are some examples of word abbreviations:
a) it --> it (no abbreviation) 1 b) d|o|g --> d1g 1 1 1 1---5----0----5--8 c) i|nternationalizatio|n --> i18n 1 1---5----0 d) l|ocalizatio|n --> l10n
Assume you have a dictionary and given a word, find whether its abbreviation is unique in the dictionary. A word's abbreviation is unique if no other word from the dictionary has the same abbreviation.
Example:
Given dictionary = [ "deer", "door", "cake", "card" ] isUnique("dear") ->false
isUnique("cart") ->true
isUnique("cane") ->false
isUnique("make") ->true
解题关键点有3个:
1. 找出word abbreviation 的规律,<first letter><number><last letter>,number = string.length() - 2
2. 当发现dictionary 里有相同的abbreviation, key 对应的value 变为""
3. The abbreviation of "hello", i.e., h3o already exists in the dictionary.
Input: ["hello"],isUnique("hello") Output: [false] Expected: [true]
If the given word itself is in the dictionary, and it has the unique abbreviation, then we should return true.
1 public class ValidWordAbbr { 2 private Map<String, String> map = new HashMap<String, String>(); 3 4 public ValidWordAbbr(String[] dictionary) { 5 for(int i = 0; i < dictionary.length; i++){ 6 String key = abbreviate(dictionary[i]); 7 if(!map.containsKey(key)){ 8 map.put(key, dictionary[i]); 9 }else{ 10 map.put(key, ""); 11 } 12 } 13 } 14 15 private String abbreviate(String str){ 16 return str.charAt(0) + Integer.toString(str.length() - 2)+ str.charAt(str.length()-1); 17 } 18 19 public boolean isUnique(String word) { 20 String x = abbreviate(word); 21 if(map.containsKey(x)){ 22 if(map.get(x).equals(word)){ 23 return true; 24 }else { 25 return false; 26 } 27 } 28 return true; 29 } 30 } 31 32 // Your ValidWordAbbr object will be instantiated and called as such: 33 // ValidWordAbbr vwa = new ValidWordAbbr(dictionary); 34 // vwa.isUnique("Word"); 35 // vwa.isUnique("anotherWord");