程序员面试金典16.20: T9键盘

题目:

在老式手机上,用户通过数字键盘输入,手机将提供与这些数字相匹配的单词列表。每个数字映射到0至4个字母。给定一个数字序列,实现一个算法来返回匹配单词的列表。你会得到一张含有有效单词的列表。映射如下图所示:

示例:

输入: num = "8733", words = ["tree", "used"]

输出: ["tree", "used"]

输入: num = "2", words = ["a", "b", "c", "d"]

输出: ["a", "b", "c"]

解题思路:

1.先通过一个一维数组保存26个字母与键盘上0-9数字的映射关系(从键盘可以看出0和1不参与),所以数组起始元素从2开始

2.遍历整数字符串,把整数字符串中的每个字符与字符串中的每个字符一一对应的从字符类型转为整型,判断是否可以匹配得上

3.前提:字符串的长度需要与num的长度相同,否则一定不能匹配成功

Code:

cpp 复制代码
class Solution {
public:
    bool ismatch(string num, string word)
    {
    //将9键键盘上的数字与字母的映射关系,用一维数字表示出来
        int arr[26]={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};
        //判断当前word是否与num匹配
        for(int i=0;i<word.size();i++)
        {
            int index=word[i]-'a';//将字符转成整型,'a'->0,'b'->1
            int data=num[i]-'0';//字符串num中的字符转成数字
            //如果出现不相等,说明不匹配,直接返回false
            if(data!=arr[index])
            {
                return false;
            }
        }
        //每个字符都对应成功,返回true
        return true;
    }
    vector<string> getValidT9Words(string num,vector<string>& words) {
        vector<string> res;//定义结果数组
        if(num.size()==0 ||words.size()==0) return res;//判空
        int n=num.size();
        //遍历字符串数组words
        for(auto& word:words)
        {
            //字符串数组中每个单词的长度必须与数字序列的长度相等,否则一定不匹配
            if(word.size()==n)
            {
                //如果匹配结果为真
                if(ismatch(num,word))
                {
                    //将word加入结果数组中
                    res.push_back(word);
                }
            }
        }
        //返回结果数组
        return res;
    }
};
相关推荐
玩泥巴的1 小时前
搭建一套.net下能落地的飞书考勤系统
c#·.net·二次开发·飞书
唐宋元明清21883 小时前
.NET 本地Db数据库-技术方案选型
windows·c#
lindexi5 小时前
dotnet DirectX 通过可等待交换链降低输入渲染延迟
c#·directx·d2d·direct2d·vortice
qq_454245037 小时前
基于组件与行为的树状节点系统
数据结构·c#
qq_459234427 小时前
【题库】| 商用密码应用安全性评估从业人员考核题库(四十)
职场和发展·密码学·学习方法·考核·商用密码·商用密码应用安全性评估·密评
银发控、7 小时前
数据库隔离级别与三个问题(脏读、不可重复读、幻读)
数据库·面试
JavaGuide7 小时前
微信面试:什么是一致性哈希算法?适用什么场景?
后端·面试
茶杯梦轩8 小时前
从零起步学习并发编程 || 第九章:Future 类详解及CompletableFuture 类在项目实战中的应用
服务器·后端·面试
bugcome_com8 小时前
C# 类的基础与进阶概念详解
c#
敲敲了个代码8 小时前
[特殊字符] 空数组的迷惑行为:为什么 every 为真,some 为假?
前端·javascript·react.js·面试·职场和发展