File tree Expand file tree Collapse file tree 5 files changed +167
-0
lines changed
best-time-to-buy-and-sell-stock
encode-and-decode-strings
implement-trie-prefix-tree Expand file tree Collapse file tree 5 files changed +167
-0
lines changed Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ int maxProfit (vector<int >& prices) {
4+ int min = INT_MAX;
5+ int profit = 0 ;
6+
7+ for (int i = 0 ; i < prices.size (); i++){
8+ if (prices[i] < min)
9+ min = prices[i];
10+
11+ profit = max (profit, prices[i] - min);
12+ }
13+
14+ return profit;
15+ }
16+ };
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ /*
4+ * @param strs: a list of strings
5+ * @return: encodes a list of strings to a single string.
6+ */
7+ string encode (vector<string> &strs) {
8+ // write your code here
9+ string code;
10+
11+ for (const string& s : strs){
12+ code += to_string (s.size ()) + " :" + s;
13+ }
14+
15+ return code;
16+ }
17+
18+ /*
19+ * @param str: A string
20+ * @return: decodes a single string to a list of strings
21+ */
22+ vector<string> decode (string &str) {
23+ // write your code here
24+ vector<string> result;
25+ int i;
26+
27+ while (i < str.size ()){
28+ int j = i;
29+
30+ while (str[j] != ' :' )
31+ j++;
32+
33+ int len = stoi (str.substr (i, j - i);
34+ string word = str.substr (j + 1 , len);
35+
36+ result.push_back (word);
37+
38+ i = j + 1 + len;
39+ }
40+
41+ return result;
42+ }
43+ };
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ vector<vector<string>> groupAnagrams (vector<string>& strs) {
4+ unordered_map<string, vector<string>> map;
5+ vector<vector<string>> result;
6+
7+ for (const string& s : strs){
8+ string key = s;
9+ sort (key.begin (), key.end ());
10+
11+ map[key].push_back (s);
12+ }
13+
14+ for (auto & pair : map){
15+ result.push_back (pair.second );
16+ }
17+
18+ return result;
19+ }
20+ };
Original file line number Diff line number Diff line change 1+ class TrieNode {
2+ public:
3+ TrieNode* children[26 ];
4+ bool isEnd;
5+
6+ TrieNode () {
7+ isEnd = false ;
8+
9+ for (int i = 0 ; i < 26 ; i++)
10+ children[i] = nullptr ;
11+ }
12+ };
13+
14+ class Trie {
15+ public:
16+ TrieNode* root;
17+
18+ Trie () {
19+ root = new TrieNode ();
20+ }
21+
22+ void insert (string word) {
23+ TrieNode* node = root;
24+
25+ for (char ch : word){
26+ int index = ch - ' a' ;
27+
28+ if (node->children [index] == nullptr ){
29+ node->children [index] = new TrieNode ();
30+ }
31+
32+ node = node->children [index];
33+ }
34+
35+ node->isEnd = true ;
36+ }
37+
38+ bool search (string word) {
39+ TrieNode* node = root;
40+
41+ for (char ch : word){
42+ int index = ch - ' a' ;
43+
44+ if (node->children [index] == nullptr )
45+ return false ;
46+
47+ node = node->children [index];
48+ }
49+
50+ return node->isEnd ;
51+ }
52+
53+ bool startsWith (string prefix) {
54+ TrieNode* node = root;
55+
56+ for (char ch : prefix){
57+ int index = ch - ' a' ;
58+
59+ if (node->children [index] == nullptr )
60+ return false ;
61+
62+ node = node->children [index];
63+ }
64+
65+ return true ;
66+ }
67+ };
Original file line number Diff line number Diff line change 1+ class Solution {
2+ public:
3+ bool wordBreak (string s, vector<string>& wordDict) {
4+ vector<bool > dp (s.length ()+1 , false );
5+
6+ dp[0 ] = true ;
7+
8+ for (int i = 1 ; i <= s.length (); i++){
9+ for (string& word : wordDict){
10+ int len = word.length ();
11+ if (i - len >= 0 && s.substr (i-len, len) == word)
12+ dp[i] = dp[i - len];
13+
14+ if (dp[i])
15+ break ;
16+ }
17+ }
18+
19+ return dp[s.length ()];
20+ }
21+ };
You can’t perform that action at this time.
0 commit comments