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();

    }
};
相关推荐
久菜盒子工作室12 分钟前
量化金融|基于算法和模型的预测研究综述
算法·金融
CoovallyAIHub43 分钟前
SBP-YOLO:面向嵌入式悬架的轻量实时模型,实现减速带与坑洼高精度检测
深度学习·算法·计算机视觉
CoovallyAIHub1 小时前
医药、零件、饮料瓶盖……SuperSimpleNet让质检“即插即用”
深度学习·算法·计算机视觉
dragoooon341 小时前
[优选算法专题二滑动窗口——串联所有单词的子串]
数据结构·c++·学习·算法·leetcode·学习方法
刃神太酷啦1 小时前
C++ 异常处理机制:从基础到实践的全面解析----《Hello C++ Wrold!》(20)--(C/C++)
java·c语言·开发语言·c++·qt·算法·leetcode
Brookty2 小时前
【算法】双指针(二)复写零
学习·算法
胖达不服输2 小时前
「日拱一码」081 机器学习——梯度增强特征选择GBFS
人工智能·python·算法·机器学习·梯度增强特征选择·gbfs
初级炼丹师(爱说实话版)3 小时前
2025算法八股——深度学习——优化器小结
人工智能·深度学习·算法
努力的小帅3 小时前
C++_哈希
开发语言·c++·学习·算法·哈希算法·散列表
Christo33 小时前
TFS-2023《Fuzzy Clustering With Knowledge Extraction and Granulation》
人工智能·算法·机器学习·支持向量机