• 程序员面试金典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:

    1. class Solution {
    2. public:
    3. bool ismatch(string num, string word)
    4. {
    5. //将9键键盘上的数字与字母的映射关系,用一维数字表示出来
    6. 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};
    7. //判断当前word是否与num匹配
    8. for(int i=0;isize();i++)
    9. {
    10. int index=word[i]-'a';//将字符转成整型,'a'->0,'b'->1
    11. int data=num[i]-'0';//字符串num中的字符转成数字
    12. //如果出现不相等,说明不匹配,直接返回false
    13. if(data!=arr[index])
    14. {
    15. return false;
    16. }
    17. }
    18. //每个字符都对应成功,返回true
    19. return true;
    20. }
    21. vector getValidT9Words(string num,vector& words) {
    22. vector res;//定义结果数组
    23. if(num.size()==0 ||words.size()==0) return res;//判空
    24. int n=num.size();
    25. //遍历字符串数组words
    26. for(auto& word:words)
    27. {
    28. //字符串数组中每个单词的长度必须与数字序列的长度相等,否则一定不匹配
    29. if(word.size()==n)
    30. {
    31. //如果匹配结果为真
    32. if(ismatch(num,word))
    33. {
    34. //将word加入结果数组中
    35. res.push_back(word);
    36. }
    37. }
    38. }
    39. //返回结果数组
    40. return res;
    41. }
    42. };

     

  • 相关阅读:
    FPGA——SPI总线控制flash(1)(含代码)
    Leetcode202. 快乐数
    B2B电子商务网站方案:为专用设备行业注入新动力,加快产业数字化转型升级
    Linxu学习——上
    SaaS企业如何构建与自身增长目标相匹配的市场力?
    centos 8.2 指南
    Linux input输入子系统
    适配器模式
    MySQL优化(2):索引与优化原理(上)
    Fiori VS code 连接配置本地SDK yaml 文件配置
  • 原文地址:https://blog.csdn.net/m0_58681055/article/details/132846279