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) 1b) d|o|g --> d1g 1 1 1 1---5----0----5--8c) i|nternationalizatio|n --> i18n 1 1---5----0d) 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") -> falseisUnique("cart") -> trueisUnique("cane") -> falseisUnique("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 Mapmap = new HashMap (); 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");