C#에서는 Substring() 메서드를 활용해 문자열의 모든 문자가 서로 중복되지 않고 고유한지 확인할 수 있습니다. 문자열의 길이만큼 반복문을 수행하면서 각 위치의 문자를 하나씩 추출하고, 나머지 문자들과 비교하는 방식입니다.
비교 과정에서 단 하나의 문자라도 다른 위치의 문자와 일치한다면, 그 문자열에는 중복된 문자가 존재한다는 의미이며, 따라서 모든 문자가 고유하지 않다고 판단할 수 있습니다.
아래 예제 코드를 직접 실행해 보면 문자열에 고유한 문자만 포함되어 있는지 여부를 손쉽게 확인할 수 있습니다.
예제
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class Demo {
public bool CheckUnique(string str) {
string one = "";
string two = "";
for (int i = 0; i < str.Length; i++) {
one = str.Substring(i, 1);
for (int j = 0; j < str.Length; j++) {
two = str.Substring(j, 1);
if ((one == two) && (i != j))
return false;
}
}
return true;
}
static void Main(string[] args) {
Demo d = new Demo();
bool b = d.CheckUnique("amit");
Console.WriteLine(b);
Console.ReadKey();
}
}출력
True
코드 동작 원리
- 바깥쪽 반복문(i)으로 문자열의 각 문자를 순서대로 하나씩 가져옵니다.
- 안쪽 반복문(j)으로 현재 문자를 나머지 모든 문자와 비교합니다.
- 인덱스가 서로 다른 상태(i != j)에서 두 문자가 같다면 중복이므로 즉시 false를 반환합니다.
- 모든 비교를 마친 후에도 중복이 발견되지 않으면 true를 반환합니다.
예제에서는 "amit"라는 문자열을 검사했습니다. 네 개의 문자가 모두 서로 다르기 때문에 최종 결과로 True가 출력됩니다.
참고: 더 효율적인 대안
위 방식은 이중 반복문을 사용하기 때문에 시간 복잡도가 O(n²)입니다. 문자열이 길어질수록 성능이 떨어질 수 있으므로, LINQ의 Distinct() 메서드를 활용하면 한 줄로 간결하게 처리할 수 있습니다.
bool isUnique = str.Distinct().Count() == str.Length;
또는 HashSet<char>에 문자를 하나씩 추가하면서 이미 존재하는 문자인지 검사하는 방법도 O(n)의 시간 복잡도로 더 효율적입니다.