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