当前位置: 首页 > news >正文

day48—双指针-通过删除字母匹配到字典最长单词(LeetCode-524)

题目描述

给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。

如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在,则返回空字符串。

示例 1:

输入:s = "abpcplea", dictionary = ["ale","apple","monkey","plea"]
输出:"apple"

示例 2:

输入:s = "abpcplea", dictionary = ["a","b","c"]
输出:"a"

提示:

  • 1 <= s.length <= 1000
  • 1 <= dictionary.length <= 1000
  • 1 <= dictionary[i].length <= 1000
  • s 和 dictionary[i] 仅由小写英文字母组成

解决方案:

1、依题目要求,先给字典内的单词排序,同等长度ASCII值小的优先(即a<b)

2、双指针:当 s[i] != dictionary[x][j],我们使 i 指针右移,i 一直处于移动中,直到找到 s 中第一位与 dictionary[x][j] 对得上的位置, j 才右移去匹配下一个字符。如此循环。

3、验证长度即可返回对应单词字符。

函数源码:

class Solution {
public: string findLongestWord(string s, vector<string>& dictionary) {sort(dictionary.begin(),dictionary.end(),[](string& a,string& b){if(a.length()==b.length())  return a<b;return a.length()>b.length();});for(int x=0;x<dictionary.size();x++){string str=dictionary[x];int i=0,j=0;while(i<str.length()&&j<s.length()){if(str[i]==s[j])    i++;j++;}if(i==str.length()) return str;}return string();}
};
http://www.dtcms.com/a/149425.html

相关文章:

  • rk3568main.cc解析
  • 多路转接select服务器
  • Node.js简介(nvm使用)
  • docker-compose搭建kafka
  • Git Flow分支模型
  • L2-2、示范教学与角色扮演:激发模型“模仿力“与“人格“
  • 从单模态到多模态:深度生成模型的演进历程
  • 【武汉理工大学第四届ACM校赛】copy
  • EAL4+与等保2.0:解读中国网络安全双标准
  • 用 Go 优雅地清理 HTML 并抵御 XSS——Bluemonday
  • 嵌入式---超声波测距模块
  • 时间模块 demo
  • 小白学习java第14天(上):数据库
  • 【目标检测】对YOLO系列发展的简单理解
  • 力扣2685(dfs)
  • 什么是管理思维?
  • APP嵌入WebView实现中国地图分布图
  • Mediatek Android13 设置Launcher
  • UML概览
  • Spark-Streaming简介 核心编程
  • 在线视频转 AVI 的便捷之选,便捷操作,无需下载软件,在线使用
  • 信息系统项目管理师_第十二章 项目风险管理
  • 复盘20250422
  • 3d打印机设备厂家|casaim打印建筑楼盘模型
  • 探索 Linux 路由表及 route 命令的奥秘
  • 每日OJ_牛客_AOE还是单体?_贪心_C++_Java
  • Spring事件机制,如何使用Spring事件监听器
  • ROS 2开发中的目录哲学:源码与产物的共生关系
  • RockChip Android14 修改LCD背光最大值
  • 云账号安全事件应急响应指南:应对来自中国IP的异常访问