Google Interview Question
Software EngineersCountry: United States
void removeDuplicateLineFromFile(std::string strFileContent[],int nSize)
{
map<std::string, int> mapFile;
for (int i = 0; i < nSize; i++)
{
if (mapFile.find(strFileContent[i]) == mapFile.end())
{
mapFile[strFileContent[i]] = 1 ;
//mapFile.insert(std::pair(strFileContent[i], 1));
//mapFile.insert(strFileContent[i],1);
}
}
printf("Removed duplicate result \r\n");
map<string, int>::iterator mapIt;
for (mapIt = mapFile.begin(); mapIt != mapFile.end() ; mapIt++)
{
printf("%s\r\n", mapIt->first.c_str());
}
}
int main()
{
std::string strFileContent[] = { {"single line"},{"double line"}, {"single line"}, {"thrible line"},{"double line"},{"single line"},{"single line"} };
int nSize = sizeof(strFileContent) / sizeof(std::string);
removeDuplicateLineFromFile(strFileContent, nSize);
}
// JavaScript version
class GetUniqueLines{
findLines(files) {
if(!files || files.length === 0) throw Error('Invalid input');
let linesCount = {};
let result = [];
for(let i = 0; i < files.length; i++) {
for(let j = 0; j < files[i].length; j++) {
linesCount[files[i][j]] ? linesCount[files[i][j]]++ : linesCount[files[i][j]] = 1;
}
}
for(let key in linesCount) {
if(linesCount[key] === 1) {
result.push(key);
}
}
return result;
}
}
// Scala version
import scala.io.Source
object UniqueLinesInFiles {
def findUniqueLines(filenames: Seq[String]): Seq[String] = {
filenames.foldLeft(Map.empty[Int, Set[String]])((linesMap, filename) => {
Source.fromFile(filename).getLines.foldLeft(linesMap)((memo, line) => {
memo.get(line.length()) match {
case Some(linesOfLength) => {
/*
This block could also be simplified to just:
memo + (line.length() -> (linesOfLength + line))
*/
if (linesOfLength.contains(line)) {
memo
} else {
memo + (line.length() -> (linesOfLength + line))
}
}
case None => {
memo + (line.length() -> Set(line))
}
}
})
}).foldLeft(Set.empty[String]) { case (memo, (_, lines)) => memo ++ lines }.toSeq
}
}
e.g.
Where files[0] is a file, and files[0] has 4 lines as 1,2,3,4.
- rahulroshan96 May 13, 2019