Day8-Leetcode刷题

今天是刷题的第八天。之前因为在做一些其他事情,已经耽搁好久没有刷题了。

524. Longest Word in Dictionary through Deleting(Medium)

原题地址
Day8-Leetcode刷题_第1张图片

题目描述

  • 这道题的题意是给定一个字符串s和存着字符串的vector数组d,其中,题目要求我们从vector中找出某个字符串可以通过删除某些给定的字符串字符来形成。输出是满足条件的字符串;
  • 其中,还有两个限制条件:1、输出满足条件的最长的字符串;2、若是满足字符串长度相同,则输出最小的词典顺序的字符串。

策略

  • 本题说是删除得到该字符串,实际上呢,如果采用删除的话,其工作量太大且难以实现,这意思转换一下其实可以表示为,如果该字符串(按顺序)在vector里面即可满足条件了。
  • 因此,这里首先对数组d做个预处理,按照长度排前面,若是长度相同则字典顺序最小的排前面,这样,就可以在遍历处理时,最先满足条件的即为题目要求。

代码:

class Solution {
public:
    string findLongestWord(string s, vector<string>& d) {
        
        sort(d.begin(), d.end(),[](string &a, string &b){
            return a.size() > b.size() || (a.size()==b.size() && a<b);
        });
        
        for(string str:d){
            int i = 0;
            for(char c:s){
                if(str[i]==c && i<str.size()) 
                    ++i;
            }
            if(i == str.size()){
                return str;
            }
        }
        return "";
    }
};

你可能感兴趣的:(LeetCode刷题,leetcode,算法)