其他分享
首页 > 其他分享> > leetcode524 通过删除字母匹配到字典里最长单词

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

作者:互联网

思路:

双指针+序列自动机优化。

实现:

 1 class Solution
 2 {
 3 public:
 4     bool check(string&s,string&t,vector<vector<int>>&dp){
 5         int n=s.length(),m=t.length();
 6         int cur=0;
 7         for(int i=0;i<m;i++){
 8             if(cur>=n)return false;
 9             cur=dp[cur][t[i]-'a'];
10             if(cur==n)return false;
11             cur++;
12         }
13         return true;
14     }
15     string findLongestWord(string s, vector<string>& dictionary)
16     {
17         string res="";
18         int n=s.length();
19         vector<vector<int>>dp(n,vector<int>(26,n));
20         dp[n-1][s[n-1]-'a']=n-1;
21         for(int i=n-2;i>=0;i--){
22             for(int j=0;j<26;j++){
23                 dp[i][j]=dp[i+1][j];
24             }
25             dp[i][s[i]-'a']=i;
26         }
27         for(int i=0;i<dictionary.size();i++){
28             string t=dictionary[i];
29             int p=t.length();
30             if(p>n)continue;
31             if(check(s,t,dp)){
32                 int p=t.length(),q=res.length();
33                 if(p>q or (p==q and t<res)){
34                     res=t;
35                 }
36             }
37         }
38         return res;
39     }
40 };

标签:cur,int,字典,单词,length,vector,leetcode524,dp,string
来源: https://www.cnblogs.com/wangyiming/p/16220961.html