谷歌面试题(8)

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

原题:

// 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()方法返回这个规则的词,再跟字典里的进行对比

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值