-
Notifications
You must be signed in to change notification settings - Fork 0
/
Feb_22.cpp
69 lines (65 loc) · 1.72 KB
/
Feb_22.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/*
Question:
Given a string and a string dictionary, find the longest string in the dictionary that can be formed by deleting some characters of the given string. If there are more than one possible results, return the longest word with the smallest lexicographical order. If there is no possible result, return the empty string.
Example 1:
Input:
s = "abpcplea", d = ["ale","apple","monkey","plea"]
Output:
"apple"
Example 2:
Input:
s = "abpcplea", d = ["a","b","c"]
Output:
"a"
*/
#include<iostream>
using namespace std;
#include <set>
#include <string>
#include <vector>
#include <map>
class Solution {
public:
bool is_subsequence(string str2, string str1)
{
int m = str1.length(), n = str2.length();
int j = 0;
for (int i=0; i<n&&j<m; i++)
if (str1[j] == str2[i])
j++;
return (j==str1.size());
}
string findLongestWord(string str, vector<string>& d)
{
set<string>s;
multimap<int,string,greater<int> >occ;
for(auto r:d)
{
occ.insert({r.size(),r});
}
int len=-1;
for(auto w:occ)
{
if(is_subsequence(str,w.second))
{
if(len!= -1 && (w.second.size() < len))
break;
s.insert(w.second);
len=w.first;
}
if(len!= -1 && (w.second.size() < len))
break;
}
if(s.size()==0)
return "";
return *(s.begin());
}
};
int main()
{
Solution d;
vector<string>v{"ale","apple","monkey","plea"};
cout<<d.findLongestWord("abpcplea",v);
//output:apple
return 0;
}