Medium
Find Duplicate File in System — C++
Full explanation · Time O(n * l) · Space O(n * l)
// Time: O(n * l), l is the average length of file content
// Space: O(n * l)
class Solution {
public:
vector<vector<string>> findDuplicate(vector<string>& paths) {
unordered_map<string, vector<string>> files;
for (const auto& path : paths) {
stringstream ss(path);
string root;
string s;
getline(ss, root, ' ');
while (getline(ss, s, ' ')) {
auto fileName = root + '/' + s.substr(0, s.find('('));
auto fileContent = s.substr(s.find('(') + 1, s.find(')') - s.find('(') - 1);
files[fileContent].emplace_back(fileName);
}
}
vector<vector<string>> result;
for (const auto& file : files) {
if (file.second.size() > 1) {
result.emplace_back(file.second);
}
}
return result;
}
};