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

C#으로 문자열의 중복 문자를 찾아 출력하는 방법

개요

문자열에서 중복된 문자를 찾으려면 각 문자의 출현 횟수를 저장할 배열을 활용하면 됩니다. C#의 char 형식은 0부터 255까지의 값을 가질 수 있으므로, 크기가 256인 정수 배열을 만들면 모든 ASCII 문자의 빈도를 손쉽게 계산할 수 있습니다.

먼저 char의 최대값에 해당하는 상수를 설정합니다.

static int maxCHARS = 256;

다음으로 문자열 내에서 중복된 문자를 화면에 출력합니다.

String s = "Welcometomywebsite!";

int []cal = new int[maxCHARS];
calculate(s, cal);

for (int i = 0; i < maxCHARS; i++)
if(cal[i] > 1) {
    Console.WriteLine("Character "+(char)i);
    Console.WriteLine("Occurrence = " + cal[i] + " times");
}

여기서 calculate() 메서드는 문자열을 한 글자씩 순회하면서 각 문자의 빈도수를 계산합니다. 이때 cal[s[i]]++처럼 문자 자체를 배열의 인덱스로 사용하며, char는 자동으로 정수형 ASCII 값으로 변환됩니다. 이후 반복문을 통해 출현 횟수가 1보다 큰 문자, 즉 중복 문자만 골라서 출력합니다.

전체 예제

using System;
class Demo {
    static int maxCHARS = 256;
    static void calculate(String s, int[] cal) {

        for (int i = 0; i < s.Length; i++)
        cal[s[i]]++;
    }

    public static void Main() {
        String s = "Welcometomywebsite!";

        int []cal = new int[maxCHARS];
        calculate(s, cal);

        for (int i = 0; i < maxCHARS; i++)
        if(cal[i] > 1) {
            Console.WriteLine("Character "+(char)i);
            Console.WriteLine("Occurrence = " + cal[i] + " times");
        }
    }
}

실행 결과

Character e
Occurrence = 4 times
Character m
Occurrence = 2 times
Character o
Occurrence = 2 times
Character t
Occurrence = 2 times

예제 문자열 "Welcometomywebsite!"에서는 문자 e가 4번, m·o·t가 각각 2번 나타나므로 이 네 문자가 중복 문자로 출력됩니다. 이 알고리즘은 문자열을 한 번만 순회하므로 시간 복잡도가 O(n)으로 효율적이며, 추가 배열 하나만 사용하기 때문에 공간 복잡도 역시 일정하게 유지됩니다.