【每日刷题】通过删除字母匹配到字典里最长单词

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sd4567855/article/details/86483019

day19, 通过删除字母匹配到字典里最长单词

题目来源:leetcode
给定一个字符串和一个字符串字典,找到字典里面最长的字符串,该字符串可以通过删除给定字符串的某些字符来得到。如果答案不止一个,返回长度最长且字典顺序最小的字符串。如果答案不存在,则返回空字符串。

示例 1:
输入:
s = “abpcplea”, d = [“ale”,“apple”,“monkey”,“plea”]
输出:
“apple”

示例 2:
输入:
s = “abpcplea”, d = [“a”,“b”,“c”]
输出:
“a”

解答:这道题关键在于排序。首先明确排序的规则,首先是按照字符串从大到小排序,当字符串大小相等时候,按照字典序排列。
排序好之后,从头开始遍历,对于每一个字符串d[i],分别与s进行匹配即可。

代码:

string findLongestWord(string s, vector<string>& d) {
        sort(d.begin(), d.end(), [](string &a, string &b){  
            if( a.size() != b.size())
                return a.size() > b.size();
            else
                return a < b;
        });
        
        for( int i = 0; i<d.size(); i++){
            int j = 0, k = 0;
            while( k < s.size()){
                if( s[k] == d[i][j])
                    k++, j++;
                else
                    k++;
            }
            if( j == d[i].size())
                return d[i];
        }
        return "";
    }

运行结果:image.png-29.2kB


我的微信公众号

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sd4567855/article/details/86483019