CSharp · Console
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
//toddmoTime(); // 0.015s
nosikTime(); // 0.016s
}
public static void toddmoTime(){
foreach (var part in getParts("Category A|Category A > Sub Category 1|Category B|Category C|Category C > Sub Category 2"))
Console.WriteLine(part);
Console.WriteLine();
Console.WriteLine("TEST 2");
foreach (var part in getParts("Category A > THIS IS DATA IS REDUNDANT|Category A > Sub Category 1 > THIS IS DATA IS REDUNDANT|Category A > Sub Category 1 > Sub Sub Category 1|Category A > Sub Category 1 > Sub Sub Category 2"))
Console.WriteLine(part);
}
public static List<string> getParts(string stringToParse)
{
var parts = stringToParse.Split('|').Select(part => part.Trim());
return parts.Where(part => !parts.Any(comparePart => part != comparePart && comparePart.StartsWith(part))).ToList();
}
public static void nosikTime(){
foreach (var part in Nosik("Category A|Category A > Sub Category 1|Category B|Category C|Category C > Sub Category 2"))
Console.WriteLine(part);
Console.WriteLine();
Console.WriteLine("TEST 2");
foreach (var part in Nosik("Category A > THIS IS DATA IS REDUNDANT|Category A > Sub Category 1 > THIS IS DATA IS REDUNDANT|Category A > Sub Category 1 > Sub Sub Category 1|Category A > Sub Category 1 > Sub Sub Category 2"))
Console.WriteLine(part);
}
public static List<string> Nosik(string stringToParse)
{
List<string> firstSplitResults = stringToParse.Split('|').Select(p => p.Trim()).ToList();
for (int i = 0; i < firstSplitResults.Count; i++)
{
int occCount = (stringToParse.Length - stringToParse.Replace(firstSplitResults[i], "").Length) / firstSplitResults[i].Length;
if (occCount > 1)
{
firstSplitResults.RemoveAt(i);
i--;
}
}
return firstSplitResults;
}
}