考虑我们有一个字典和一个字符串s。在字典中找到最长的字符串,可以通过删除字符串s的某些字符来形成。假设s为“ apbreoigroakml”,则字典中有{“ prog”,“ ram”,“ program”},则结果为“ program”。
为了解决这个问题,我们将遍历所有字典单词,对于每个单词,我们将检查给定字符串的子序列是否是所有此类单词中最长的。最后返回给定字符串的最长单词作为子序列。
#include<iostream> #include<vector> using namespace std; bool isSubSequence(string s1, string s2) { int m = s1.length(), n = s2.length(); int j = 0; for (int i=0; i<n&&j<m; i++) if (s1[j] == s2[i]) j++; return (j==m); } string getLongestSubstr(vector <string > dict, string s) { string result = ""; int length = 0; for (string word : dict) { if (length < word.length() && isSubSequence(word, s)) { result = word; length = word.length(); } } return result; } int main() { vector <string > dict = {"prog", "ram", "program"}; string str = "apbreoigroakml" ; cout << getLongestSubstr(dict, str) << endl; }
输出结果
program