Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#으로 문자열의 모든 문자가 고유한지 확인하는 방법

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)의 시간 복잡도로 더 효율적입니다.