首页 > 其他分享 >524. 通过删除字母匹配到字典里最长单词 (Medium)

524. 通过删除字母匹配到字典里最长单词 (Medium)

时间:2023-02-28 17:55:27浏览次数:47  
标签:Medium return string dictionary 524 字符串 word 字典 size

问题描述

524. 通过删除字母匹配到字典里最长单词 (Medium)

给你一个字符串 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] 仅由小写英文字母组成

解题思路

首先将dictionary按长度从大到小排序,相同长度的字符串,字典序小的在前面;

判断dictionary中的字符串是否能通过删除s中的某些字符得到可以利用双指针优化时间复杂度为\(O(n)\),ns的长度。

代码

class Solution {
  public:
    bool IsSub(string &s, string &word) {
        for (int i = 0, j = 0; j < word.size();) {
            if (i == s.size()) {
                return false;
            }
            if (s[i] == word[j]) {
                i++;
                j++;
            } else {
                i++;
            }
        }
        return true;
    }
    string findLongestWord(string s, vector<string> &dictionary) {
        auto cmp = [&](string &s1, string &s2) {
            if (s1.size() != s2.size()) {
                return s1.size() > s2.size();
            }
            return s1 < s2;
        };
        std::sort(dictionary.begin(), dictionary.end(), cmp);
        for (auto &word : dictionary) {
            if (IsSub(s, word)) {
                return word;
            }
        }
        string res;
        return res;
    }
};

标签:Medium,return,string,dictionary,524,字符串,word,字典,size
From: https://www.cnblogs.com/zwyyy456/p/17165411.html

相关文章

  • 89. 格雷编码 (Medium)
    问题描述89.格雷编码(Medium)n位格雷码序列是一个由2ⁿ个整数组成的序列,其中:每个整数都在范围[0,2ⁿ-1]内(含0和2ⁿ-1)第一个整数是0一个整数在序列......
  • 397. 整数替换 (Medium
    问题描述397.整数替换(Medium)给定一个正整数n,你可以做如下操作:如果n是偶数,则用n/2替换n。如果n是奇数,则可以用n+1或n-1替换n。返回n变为......
  • 1238. 循环码排列 (Medium)
    问题描述1238.循环码排列(Medium)给你两个整数n和start。你的任务是返回任意(0,1,2,,...,2^n-1)的排列p,并且满足:p[0]=startp[i]和p[i+1]的二进制表示形......
  • 1792. 最大平均通过率 (Medium)
    问题描述1792.最大平均通过率(Medium)一所学校里有一些班级,每个班级里有一些学生,现在每个班都会进行一场期末考试。给你一个二维数组classes,其中classes[i]=[pass......
  • 132 模式 (Medium)
    问题描述456.132模式(Medium)给你一个整数数组nums,数组中共有n个整数。132模式的子序列由三个整数nums[i]、nums[j]和nums[k]组成,并同时满足:i<j<k......
  • 1139. 最大的以 1 为边界的正方形 (Medium)
    问题描述1139.最大的以1为边界的正方形(Medium)给你一个由若干0和1组成的二维网格grid,请你找出边界全部由1组成的最大正方形子网格,并返回该子网格中的元素......
  • 1218.最长定差子序列 (Medium)
    问题描述1218.最长定差子序列(Medium)给你一个整数数组arr和一个整数difference,请你找出并返回arr中最长等差子序列的长度,该子序列中相邻元素之间的差等于differ......
  • 334. 递增的三元子序列 (Medium)
    问题描述334.递增的三元子序列(Medium)给你一个整数数组nums,判断这个数组中是否存在长度为3的递增子序列。如果存在这样的三元组下标(i,j,k)且满足i<j<k......
  • 对复杂字典Dictionary<T1,T2>排序问题
    //VoltageCount类(电压值对应的数量):publicclassVoltageCount{publicDoubleVoltage{get;set;}//电压值publicintCountV{get;set;}......
  • 03 字典类型
    #1、作用#2、定义:{}内用逗号分隔开多个key:value,其中value可以使任意类型,但是#key必须是不可变类型,且不能重复#造字典的方式一:#d={......