程序员面试金典 16.20

本文介绍了一种利用T9键盘输入序列快速查找字典中匹配单词的算法。通过构建数字到字母的映射,并预先生成所有可能的单词组合,实现了高效搜索。文章详细解释了算法原理,包括暴力搜索的不足与优化后的解决方案。

T9:给定T9键盘的按键顺序,求所以可以得到的字典中的单词。

最暴力的方法是建立键盘数字到字母的映射,然后深搜,时间复杂度为O(4 ^ n),其中nnum的长度,提交了一下,超时了,所以应该提前打好表,直接返回即可。

class Solution {
private:
    vector<char> KeyBoard = {
        '2', '2', '2', 
        '3', '3', '3',
        '4', '4', '4',
        '5', '5', '5',
        '6', '6', '6',
        '7', '7', '7', '7',
        '8', '8', '8',
        '9', '9', '9', '9'
    };
    map<string, vector<string>> Table;
    void buildTable(const vector<string> &words)
    {
        for(auto word : words)
        {
            string num;
            for(auto c : word)
            {
                num.push_back(KeyBoard[c - 'a']);
            }
            Table[num].push_back(word);
        }
    }
public:
    vector<string> getValidT9Words(string num, vector<string>& words) {
        buildTable(words);
        auto iter = Table.find(num);
        if(iter != Table.end()) return iter->second;
        else return {};
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值