주어진 문자열에서 반복되지 않는 첫 문자를 찾자.
방법 : 문자열을 문자 배열로 형변환 한다음, 각 문자의 출현 횟수를 해시 테이블에 저장. 문자열의 각 문자가 나열된 순서대로, 해시 테이블에 저장된 숫자를 찾음. 2보다 작은 값을 가진 첫 키-값 쌍이 출현할때, 해당 키가 반복되지 않는 첫 문자다.
using System;
using System.Collections.Generic;
using System.Linq;
public class FindFirstNonRepeatedCharacter
{
public static void Run()
{
const string str = "Straight Outta Compton";
Console.WriteLine(GetFirstNonRepeatedCharacter(str));
}
private static char GetFirstNonRepeatedCharacter(string str)
{
var table = new Dictionary<char, int>();
var charArray = str.ToCharArray();
foreach (var character in charArray)
{
if (!table.ContainsKey(character))
{
table.Add(character, 1);
}
else
{
table[character] += 1;
}
}
return charArray.FirstOrDefault(character => table[character] < 2);
}
}
문자의 정확한 출현 개수에는 관심이 없으므로, 해시 테이블에 저장할 값을 [2보다 작은 값, 2보다 큰 값]의 두가지 상태만 가지는 별도의 타입을 만들면 성능이 향상될 수 있다.