using System; using System.Collections.Generic; public class Test { public static void Main() { Console.WriteLine("Output {0}", returnSecondDuplicate(new[] { 'x', 'y', 'z', 'x', 'y' })); Console.WriteLine("Output {0}", returnSecondDuplicate(new[] { 'a', 'a', 'b', 'a', 'c', 'b', 'a', 'c', 'b' })); Console.WriteLine("Output {0}", returnSecondDuplicate(new[] { 'a', 'a', 'a', 'b', 'a', 'c', 'b', 'a', 'c', 'b' })); Console.ReadLine(); } public static char returnSecondDuplicate(char[] arr) { if (arr.Length == 0) throw new ArgumentNullException("Empty Array passed"); var dictionary = new Dictionary(); var duplicates = new List(); Char second = '\0'; int i = 0; while (duplicates.Count != 2 && dictionary.Count != arr.Length) { if (!dictionary.ContainsKey(arr[i])) dictionary.Add(arr[i], 1); else if (!duplicates.Contains(arr[i])) duplicates.Add(arr[i]); // only add duplicates once (ignoring any duplicate duplicates!) second = duplicates.Count == 2 ? arr[i] : second; i++; } return second; } }