• [Locked] Unique Word Abbreviation


    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

    分析:

      其实题目没有表达清楚...应该包含如下意思:

      1. dictionary = {"dear"},  isUnique("door") -> false

      2. dictionary = {"door", "door"}, isUnique("door") -> true

      3. dictionary = {"dear", "door"}, isUnique("door") -> false

      所以当缩写存在时,也并非一定要return false,如果原字典中与query缩写一致的原字符串,如2中dict的两个"door",与query原字符串"door"一致,那么也应该return true。

    代码:

    class Solution {
    private:
        string maptoabbr(string str) {
            string abbr = "";
            abbr += str[0];
            //若只有一位,则直接返回;有两位,则中间不加数字;两个以上,则加数字
            if(str.length() > 1) {
                abbr += str.length() > 2 ? to_string(str.length() - 2) : "";
                abbr += str.back();
            }
            return abbr;
        }
        //hashabbr用来存储缩写后的字符串,hashorig用来存储原始字符串
        unordered_multiset<string> hashabbr, hashorig;
        
    public:
        Solution(vector<string> dict) {
            for(string str : dict) {
                hashorig.insert(str);
                hashabbr.insert(maptoabbr(str));
            }
        }
        bool isUnique(string str) {
            string abbr = maptoabbr(str);
            //如果缩写不存在字典中,直接return true
            if(hashabbr.find(abbr) == hashabbr.end())
                return true;
            //如果缩写在字典中,则如果query只对应一种原始字符串,则return true;否则return false
            return hashabbr.count(abbr) == hashorig.count(str);
        }
    };

     

  • 相关阅读:
    1.5环境变量与文件查找(学习过程)
    1.4程序的机器级表示(学习过程)
    1.3信息的表示和处理(学习过程)
    hdu4706
    【多重背包】Transport Ship
    【动态规划】Mathematical Curse
    【动态规划】subsequence 1
    学习线性基
    学习秦九韶算法
    学习裴蜀定理
  • 原文地址:https://www.cnblogs.com/littletail/p/5222468.html
Copyright © 2020-2023  润新知