谷歌面试题(8)

来源:互联网 发布:优衣库官方网络旗舰店 编辑:程序博客网 时间:2024/06/06 00:09

大家都知道谷歌是科技界的领头羊,他的面试题肯定有一些参考意义,所以本人就选了几道代表性面试题。给自己或其他人一些帮助

原题:

// 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

解析:给一个字典,再输入一个单词看这个词是否是唯一的,按一定的规则,第一个字母和最后一个字母一样,中间的字母用数字表示。
答案:

import java.util.ArrayList;public class ValidWordAbbr {    HashMap<String, String> map;    public ValidWordAbbr(String[] dictionary) {        this.map = new HashMap<String, String>();        for(String word : dictionary) {            String key = getKey(word);            if(map.containsKey(key)) {                if(!map.get(key).equals(word)) {                    map.put(key, "");                }            }            else {                map.put(key, word);            }        }    }    public boolean isUnique(String word) {        return !map.containsKey(getKey(word))||map.get(getKey(word)).equals(word);    }    public String getKey(String word) {        if(word.length() <= 2) return word;        return word.charAt(0) + Integer.toString(word.length() - 2) + word.charAt(word.length() - 1);    }}// Your ValidWordAbbr object will be instantiated and called as such:// ValidWordAbbr vwa = new ValidWordAbbr(dictionary);// vwa.isUnique("Word");// vwa.isUnique("anotherWord");

核心流程:getKey()方法返回这个规则的词,再跟字典里的进行对比