【leetcode 524. 通过删除字母匹配到字典里最长单词】双指针,在不同字符串中同向查找

2023-11-18

解题思路:
依旧是双指针,不过双指针在不同字符串中同向查找,且在使用双指针前需要对被查找集合做排序

1,根据题目要求,先将dictionary的字符串按照字符串的长度从大到小排序,且字符串符合字典序,进行排序,目的是为了接下查找时,dictionary中第一个符合条件字符串的即为题目要求的答案

2,定义并初始化,字符串s的长度s_len,dictionary的长度d_len,dictionary中字符串的长度ds_len,指向字符串s的指针s_ptr指向dictionary中第i个字符串的指针ds_ptr

3,for循环遍历dictionary中所以字符串,获取当前dictionary中第i个的字符串的长度

4,while循环使用双指针,比较字符串s是否包含当前第i个dictionary中的字符串,
(1)如果包含,则d_ptr遍历到dictionary中第i个的字符串的末尾,即d_ptr == ds_len - 1,返回dictionary[i]即为答案,即返回长度最长且字典序最小的字符串。
(2)如果不包含,则d_ptr未遍历到dictionary中第i个的字符串的末尾,且s_ptr遍历到字符串s的末尾

5,退出当前while循环,即将遍历dictionary中的第i+1个字符串,双指针归零为下一个while循环做准备

6,如果退出for循环,则表示答案不存在,则返回空字符串。

图片.png

代码:

class Solution {
public:
string findLongestWord(string s, vector<string> & dictionary) {

    //字符串的长度从大到小排序,且字符串符合字典序
    auto cmp = [&] (string& a, string& b) 
    {
            if (a.size() == b.size()) {
                return a < b;
            }
            return a.size() > b.size();
    };
    sort(dictionary.begin(), dictionary.end(), cmp);


    int s_len = s.size(), d_len = dictionary.size(), ds_len = 0;
    int s_ptr = 0, d_ptr = 0;

    //双指针方法,遍历字典
    for (int i = 0; i < d_len; ++i)
    {
        ds_len = dictionary[i].size();   //当前字典的字符串的长度

        while (s_ptr < s_len && d_ptr < ds_len)
        {
            if (s[s_ptr] == dictionary[i][d_ptr])   //存在相等的字母
            {
                if (d_ptr == ds_len - 1)    //且已经到达当前字符串的末尾,即存在,因为已经排序,所以第一个符合条件的即为答案
                {
                    return dictionary[i];
                }

                //当前字典的字符串的下一个字母
                ++d_ptr;

            }
            //匹配被查找字符串的下一个字母
            ++s_ptr;
        }

        //比较字典的下一个字符串,被查找字符串的s_ptr归零
        s_ptr = 0;
        //进行字典的下一个字符串比较,d_ptr归零
        d_ptr = 0;

    }

    return "";
    }
};

   

如有不足之处,还望指正 1


  1. 如果对您有帮助可以点赞、收藏、关注,将会是我最大的动力 ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【leetcode 524. 通过删除字母匹配到字典里最长单词】双指针,在不同字符串中同向查找 的相关文章

随机推荐

  • 如何在 Ubuntu 14.04 上安装、配置和部署 Rocket.Chat

    介绍 火箭聊天是一个用 Meteor 构建的开源消息传递应用程序 它支持视频会议 文件共享 语音消息 拥有功能齐全的 API 等等 Rocket Chat 对于那些喜欢完全控制自己的通信的人来说非常有用 在本教程中 我们将在新的 Ubunt
  • 如何在 Ubuntu 22.04 上使用 xrdp 启用远程桌面协议

    作者选择了COVID 19 救济基金接受捐赠作为为捐款而写程序 介绍 远程桌面协议 RDP 是 Microsoft 开发的一种网络协议 允许用户远程访问远程 Windows 服务器的图形用户界面并与之交互 RDP 采用客户端 服务器模型 其
  • Apache 配置错误 AH00558:无法可靠地确定服务器的完全限定域名

    介绍 阿帕奇AH00558 Could not reliably determine the server s fully qualified domain name当 Apache 未配置全局变量时 会生成消息ServerName指示 该
  • 如何安装 Puppet 来管理您的服务器基础设施

    Note 本教程的较新版本使用 Puppet Server 而不是 Puppet with Passenger 可以在此处找到 如何在 Ubuntu 14 04 上的主代理设置中安装 Puppet 4 介绍 Puppet 来自 Puppet
  • 20 多个 Maven 命令和选项(备忘单)

    介绍 Maven 是 Java 应用程序最流行的项目和依赖关系管理工具之一 Maven 提供了许多命令和选项来帮助您完成日常任务 本备忘单使用示例 Maven 项目来演示一些有用的 Maven 命令 它最初是为 OpenJDK 13 0 1
  • Python HTTP 客户端请求 - GET、POST

    Python HTTP 模块定义了提供 HTTP 和 HTTPS 协议客户端的类 在大多数程序中 HTTP模块并不直接使用 而是与urllib处理 URL 连接以及与 HTTP 请求交互的模块 今天我们将学习如何使用 Python HTTP
  • 如何在 Node.js 中使用 __dirname

    介绍 dirname是一个环境变量 它告诉您包含当前正在执行的文件的目录的绝对路径 在本文中 您将探索如何实施 dirname在您的 Node js 项目中 先决条件 要完成本教程 您将需要 Node js 的一般知识 要了解有关 Node
  • 如何在 Ubuntu 14.04 上安装 Git

    介绍 现代软件开发中不可或缺的工具是某种版本控制系统 版本控制系统允许您在源代码级别跟踪您的软件 您可以跟踪更改 恢复到之前的阶段以及分支以创建文件和目录的备用版本 最流行的版本控制系统之一是git 一个分布式版本控制系统 许多项目在 gi
  • 如何在 Centos 6 上使用 Rsync 创建站点的异地备份

    Status 已弃用 本文介绍不再受支持的 CentOS 版本 如果您当前运行的服务器运行 CentOS 6 我们强烈建议您升级或迁移到受支持的 CentOS 版本 Reason CentOS 6 于 2020 年 11 月 30 日达到生
  • 如何在 Linux/Ubuntu 中使用 PhotoRec 恢复已删除的文件

    不小心删除了文件或照片 在本教程中 我们将学习如何使用 PhotoRec 在 Linux 中恢复已删除的文件 在之前的教程中 我们讨论了使用名为的 Linux 实用程序恢复已删除文件的步骤TestDiskPhotoRec 实用程序是由同一家
  • Scala 面试问题与解答

    欢迎来到 Scala 面试问题和解答 如今 大多数金融 银行 政府 电信 社交网络等公司都在使用Scala Play 和 Akka 框架开发他们的项目 因为这些框架同时支持 OOP 和 FP 功能 并且还提供了许多优势 Scala 面试问题
  • comgt General Commands Manual

    reference url comgt 1 comgt Debian testing Debian Manpages NAME comgt Option GlobeTrotter GPRS EDGE 3G HSDPA and Vodafon
  • 大端对齐与小端对齐

    地址绑定技术 在概念上 等效于联合体 union 例如 联合体实现地址绑定 union Example unsigned long dNumber unsigned char Array 4 Data 在这个联合体 Example 中 un
  • 心理学的166个现象---之二

    22 长尾效应 长尾效应的根本就是要强调 个性化 客户力量 和 小利润大市场 也就是要赚很少的钱 但是要赚很多人的钱 要将市场细分到很细很小的时候 然后就会发现这些细小市场的累计会带来明显的长尾的效应 以图书为例 Barnes Noble的
  • SQL Server导入Excel常见错误以及注意点

    1 excel第一行的字段名与数据库字段名需一一对应 导入时在 选择表和源视图 步骤 需注意 编辑 选项里的EXCEL列是否已经与表字段对应 如果某一字段为忽略 则会出现导入不匹配的错误 注意Excel的字段顺序 个数是否与表结构相同 2
  • TensorFlow 图片读取

    TensorFlow Version 2 0 0 image raw tf io read file img jpg image tf image decode image image raw channels None dtype tf
  • 2023高教社杯全国大学生数学建模竞赛C题思路模型代码

    2023高教社杯全国大学生数学建模竞赛C题思路模型代码 一 国赛常用的模型算法 1 蒙特卡罗算法 该算法又称随机性模拟算法 是通过计算机仿真来解决问题的算法 同时可以通过模拟可以来检验自己模型的正确性 比较好用的算法 2 数据拟合 参数估计
  • Zotero文献管理工具使用教程-2

    1 打开word 2 选择zotero标签 3 点击Add Edit Citation 4 选择要导入文献的格式后点击OK 这里以GB T 7714 1987为例 5 鼠标光标选中要插入的位置 前边一定要有文字 之后点击2所框选位置 6 点
  • 关于置信区间、置信度的理解

    关于置信区间和置信度的理解 在网上找了两个相关的观点感觉讲的很好 恍然大悟 简单概括 参数只有一个是固定的不会变 我们用局部估计整体 参数95 的置信度在区间A的意思是 正确 采样100次计算95 置信度的置信区间 有95次计算所得的区间包
  • 【leetcode 524. 通过删除字母匹配到字典里最长单词】双指针,在不同字符串中同向查找

    解题思路 依旧是双指针 不过双指针在不同字符串中同向查找 且在使用双指针前需要对被查找集合做排序 1 根据题目要求 先将dictionary的字符串按照字符串的长度从大到小排序 且字符串符合字典序 进行排序 目的是为了接下查找时 dicti