通过C ++删除字典中最长的单词

假设我们有一个字符串和一个字符串字典,我们必须在字典中找到最长的字符串,该字符串可以通过删除给定字符串的某些字符来形成。如果有多个可能的结果,则仅以最小的字典顺序返回最长的单词。如果没有结果,则返回一个空白字符串。因此,如果输入类似于“ abpcplea”,并且d = [“ ale”,“ apple”,“ monkey”,“ plea”],则结果将为“ apple”。

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个称为的方法isSubsequence()。这将需要s1和s2

  • j:= 0

  • 对于范围从0到s1的i

    • 如果s2 [j] = s1 [i],则将j增加1

    • 如果j = s2的大小,则打破循环

  • 如果j = s2的大小,则返回true

  • 从主要方法中,执行以下操作-

  • ans:=一个空白字符串

  • 对于范围从0到d – 1的i

    • 如果isSubsequence(s,x)为true,则ans:= x

    • x:= d [i]

    • 如果x的大小> ans的大小或x的大小= ans的大小且x <ans的大小,则

  • 返回ret

让我们看下面的实现以更好地理解-

示例

#include <bits/stdc++.h>
using namespace std;
class Solution {
   public:
   bool isSubsequence(string s1, string s2){
      int j =0;
      for(int i = 0; i < s1.size(); i++){
         if(s2[j] == s1[i]){
            j++;
            if(j == s2.size()) break;
         }
      }
      return j == s2.size();
   }
   string findLongestWord(string s, vector<string>& d) {
      string ans = "";
      for(int i = 0; i < d.size(); i++){
         string x = d[i];
         if(x.size() > ans.size() || (x.size() == ans.size() && (x < ans))){
            if(isSubsequence(s, x)) ans = x;
         }
      }
      return ans;
   }
};
main(){
   vector<string> v = {"ale","apple","monkey","plea"};
   Solution ob;
   cout << (ob.findLongestWord("abpcplea", v));
}

输入值

"abpcplea"
["ale","apple","monkey","plea"]

输出结果

apple