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
Difficulty: Easy
Use two hashmaps to implement
public class ValidWordAbbr {
HashMap<String, Integer> dict = new HashMap<String, Integer>();
HashMap<String, Integer> abb = new HashMap<String, Integer>();
public ValidWordAbbr(String[] dictionary) {
for(String s : dictionary){
dict.put(s, 1);
if(s.length() >= 2){
String ab = s.charAt(0) + String.valueOf(s.length() - 2) + s.charAt(s.length() - 1);
if(!abb.containsKey(ab)){
abb.put(ab, 1);
}
else{
abb.put(ab, abb.get(ab) + 1);
}
}
}
}
public boolean isUnique(String word) {
if(word.length() == 0)
return true;
if(word.length() == 1)
return true;
String s = word.charAt(0) + String.valueOf(word.length() - 2) + word.charAt(word.length() - 1);
if(dict.containsKey(word) && abb.get(s) >= 2){
return false;
}
if(dict.containsKey(word) && abb.get(s) == 1){
return true;
}
if(abb.containsKey(s)){
return false;
}
return true;
}
}
// Your ValidWordAbbr object will be instantiated and called as such:
// ValidWordAbbr vwa = new ValidWordAbbr(dictionary);
// vwa.isUnique("Word");
// vwa.isUnique("anotherWord");