Professional Documents
Culture Documents
Trifacta Interview Questions: Round 1
Trifacta Interview Questions: Round 1
Round 1:
Longest substring of distinct characters. (Leetcode Medium)
Sol.
#include<bits/stdc++.h>
using namespace std;
string lsdc(string str) {
int j = 0, maxLen = 0;
string res = "";
unordered_map<char, int> charCount;
for (int i=0; i<str.size(); i++) {
while(charCount[str[i]] == 1) {
charCount[str[j]]--;
if(charCount[str[j]] == 0)charCount.erase(str[j]);
j++;
}
charCount[str[i]]++;
if (i-j+1 > maxLen) {
maxLen = i-j+1;
res = str.substr(j, maxLen);
}
}
return res;
}
int main () {
vector<string> testcases = {"geeksforgeeks", "abcabcb", "pwwkw"};
for (string str : testcases) {
string res = lsdc(str);
cout<<res<<" ("<<res.size()<<")"<<endl;
}
return0;
}
return 0;
}
Round 2:
Implement Least Recently Used (LRU) Cache. (Leetcode Hard)
Sol.
#include <bits/stdc++.h>
using namespace std;
class LRU {
int size;
list<pair<int, int>> dl;
unordered_map<int, list<pair<int, int>>::iterator> mp;
public:
LRU (int capacity) {
size = capacity;
}
int get (int key) {
if(mp.find(key) == mp.end()) {
return -1;
} else {
auto it = mp[key];
int val = it->second;
dl.erase(it);
dl.push_front({key, val});
mp[key] = dl.begin();
return val;
}
}
void add (int key, int val) {
if(mp.find(key) == mp.end()) {
if(mp.size() == size) {
auto rit = dl.rbegin();
mp.erase(rit->first);
dl.pop_back();
}
} else {
auto it = mp[key];
dl.erase(it);
}
dl.push_front({key, val});
mp[key] = dl.begin();
}
void displayCache() {
for (auto it=dl.begin(); it!=dl.end(); it++) {
cout<<it->first<<" "<<it->second<<endl;
}
}
};
int main () {
LRU lru(5);
lru.add(1, 10);
lru.add(2, 10);
lru.add(3, 10);
lru.displayCache();
cout<<lru.get(1);
lru.add(4, 10);
lru.add(5, 10);
lru.add(6, 10);
lru.displayCache();
return 0;
}