当前位置: 首页 > 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();}
};

相关文章:

  • 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简介 核心编程
  • 新“出差三人组”亮相!神二十乘组简历来了
  • 科普书单·新书|鸟界戏精观察报告
  • 秦洪看盘|新热点涌现,A股活力渐显
  • A股低开高走,震荡收涨:两市成交10414亿元,4360股收涨
  • 花卉引流+商场促销,上海浦东用“花经济”带动“消费热”
  • 从板凳席到指挥台,横扫广东男篮的少帅潘江究竟有何神奇