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
  • sdictionary[i] 仅由小写英文字母组成

解决方案:

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

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

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

函数源码:

cpp 复制代码
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();

    }
};
相关推荐
逑之32 分钟前
C语言笔记10:sizeof和strlen,指针与数组
c语言·笔记·算法
求梦82036 分钟前
【力扣hot100题】旋转图像(15)
算法·leetcode·职场和发展
C雨后彩虹5 小时前
任务最优调度
java·数据结构·算法·华为·面试
少林码僧7 小时前
2.31 机器学习神器项目实战:如何在真实项目中应用XGBoost等算法
人工智能·python·算法·机器学习·ai·数据挖掘
钱彬 (Qian Bin)7 小时前
项目实践15—全球证件智能识别系统(切换为Qwen3-VL-8B-Instruct图文多模态大模型)
人工智能·算法·机器学习·多模态·全球证件识别
Niuguangshuo8 小时前
EM算法详解:解密“鸡生蛋“的机器学习困局
算法·机器学习·概率论
a3158238068 小时前
Android 大图显示策略优化显示(一)
android·算法·图片加载·大图片
一条大祥脚8 小时前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法
鲨莎分不晴8 小时前
反向传播的数学本质:链式法则与动态规划的完美共舞
算法·动态规划
sonadorje8 小时前
逻辑回归中的条件概率
算法·机器学习·逻辑回归