using System.Collections.Generic;
public static IList<IList<string>> FindDuplicate(string[] paths) {
var contentMap = new Dictionary<string, IList<string>>();
foreach (string path in paths)
string[] splitted = path.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries);
string folder = splitted[0] + '/';
for (int i = 1; i < splitted.Length; i++)
string file = splitted[i];
int start = file.IndexOf('(');
string content = file.Substring(start, file.Length - start);
if (!contentMap.ContainsKey(content))
contentMap[content] = new List<string>();
contentMap[content].Add($"{folder}{file.Substring(0, start)}");
return contentMap.Any() ? contentMap.Values.Where(l => l.Count > 1).ToList() : new List<IList<string>>();
public static void ShowList(IList<IList<string>> lists)
Console.WriteLine("\nOutput:");
foreach (var list in lists)
Console.WriteLine($"[{string.Join(", ", list)}]");
public static void Main()
Console.WriteLine("UniLecs");
ShowList(FindDuplicate(new string[] {
"root/a 1.txt(abcd) 2.txt(efgh)",
ShowList(FindDuplicate(new string[] {
"root/a 1.txt(abcd) 2.txt(efgh)",