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

Posted ych9527

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过删除字母匹配到字典里最长单词相关的知识,希望对你有一定的参考价值。

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

  • 题意:字典是一个string数组,从数组中寻找元素与s的子串进行匹配,要求匹配的字符串尽可能的长,当匹配的字符串长度相等时,选择字典序小的
  • 题解:
    • 将string数组进行排序,按照长度排升序,按照字典序排降序
    • 从前往后进行匹配,越匹配后面的越符合要求,因为后面的长度越长,字典序越小
    • 匹配方法,给定两个指针,一个指针begin1指向s,一个指针begin2指向数组的元素,当begin2指向的位置超过当前元素,表示全部匹配
class Solution {
public:

    //短的,字典序大的在前面
    struct Less
    {
        bool operator()(string &s1,string &s2)
        {
            //s1比s2短,排在s2前面
            if(s1.size()<s2.size())
                return true;
            //s1比s2长
            else if(s1.size()>s2.size())
                return false;

            //一样长,字典序大的在前面
            for(int i=0;i<s2.size();i++)
            {
                if(s1[i]>s2[i])
                    return true;
                else if(s1[i]<s2[i])
                    return false;
                else
                    continue;
            }
            return false;
        }
    };
    string findLongestWord(string s, vector<string>& dictionary) {
        //题意:s删除某些字符,得到字典中的最长字符串
        //给定两个指针,一个指向s,一个指向字典
        //先将字典内的字符按照规则排序 -> 长度升序,字典序升序
        string ret;
        sort(dictionary.begin(),dictionary.end(),Less());
        for(int i=0;i<dictionary.size();i++)
        {
            int begin1=0;
            int begin2=0;

            while(begin1<s.size() && begin2<dictionary[i].size())
            {
                if(s[begin1]==dictionary[i][begin2])
                {
                    begin1++;
                    begin2++;
                }
                else//当前不匹配
                    begin1++;
            }

            //后面的指针走完了,表示当前匹配,更新字符串
            if (begin2==dictionary[i].size())
                ret=dictionary[i];
        }
        return ret;
    }
};

以上是关于通过删除字母匹配到字典里最长单词的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode——通过删除字母匹配到字典里最长单词(子序列)

[M贪心] lc524. 通过删除字母匹配到字典里最长单词(排序+判断子序列)

[M贪心] lc524. 通过删除字母匹配到字典里最长单词(排序+判断子序列)

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

leetcode中等524通过删除字母匹配到字典里最长单词

通过删除字母匹配到字典里最长单词--双指针or自动机预处理?