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<char, int>();
var duplicates = new List<char>();
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;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiT3V0cHV0IHswfSIsIHJldHVyblNlY29uZER1cGxpY2F0ZShuZXdbXSB7ICd4JywgJ3knLCAneicsICd4JywgJ3knIH0pKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiT3V0cHV0IHswfSIsICByZXR1cm5TZWNvbmREdXBsaWNhdGUobmV3W10geyAnYScsICdhJywgJ2InLCAnYScsICdjJywgJ2InLCAnYScsICdjJywgJ2InIH0pKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiT3V0cHV0IHswfSIsIHJldHVyblNlY29uZER1cGxpY2F0ZShuZXdbXSB7ICdhJywgJ2EnLCAnYScsICdiJywgJ2EnLCAnYycsICdiJywgJ2EnLCAnYycsICdiJyB9KSk7CiAgICAgICAgQ29uc29sZS5SZWFkTGluZSgpOwoJfQoJCglwdWJsaWMgc3RhdGljIGNoYXIgcmV0dXJuU2Vjb25kRHVwbGljYXRlKGNoYXJbXSBhcnIpCgl7CgkJaWYgKGFyci5MZW5ndGggPT0gMCkKCQkgICAgdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbigiRW1wdHkgQXJyYXkgcGFzc2VkIik7CgkJdmFyIGRpY3Rpb25hcnkgPSBuZXcgRGljdGlvbmFyeTxjaGFyLCBpbnQ+KCk7CgkJdmFyIGR1cGxpY2F0ZXMgPSBuZXcgTGlzdDxjaGFyPigpOwoJCUNoYXIgc2Vjb25kID0gJ1wwJzsKCQlpbnQgaSA9IDA7CgkJCiAgICAgICAgd2hpbGUgKGR1cGxpY2F0ZXMuQ291bnQgIT0gMiAmJiBkaWN0aW9uYXJ5LkNvdW50ICE9IGFyci5MZW5ndGgpCiAgICAgICAgewogICAgICAgICAgICBpZiAoIWRpY3Rpb25hcnkuQ29udGFpbnNLZXkoYXJyW2ldKSkKICAgICAgICAgICAgICAgIGRpY3Rpb25hcnkuQWRkKGFycltpXSwgMSk7CiAgICAgICAgICAgIGVsc2UgaWYgKCFkdXBsaWNhdGVzLkNvbnRhaW5zKGFycltpXSkpCiAgICAgICAgICAgICAgICBkdXBsaWNhdGVzLkFkZChhcnJbaV0pOyAvLyBvbmx5IGFkZCBkdXBsaWNhdGVzIG9uY2UgKGlnbm9yaW5nIGFueSBkdXBsaWNhdGUgZHVwbGljYXRlcyEpCgogICAgICAgICAgICBzZWNvbmQgPSBkdXBsaWNhdGVzLkNvdW50ID09IDIgPyBhcnJbaV0gOiBzZWNvbmQ7CiAgICAgICAgICAgIGkrKzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWNvbmQ7Cgl9Cn0=