두 문자열에서 공통으로 나타나는 문자를 알파벳 순서대로 출력하려면 아래와 같은 코드를 사용할 수 있습니다.
예제
import java.io.*;
import java.util.*;
public class Demo{
static void common_chars(String str_1, String str_2){
int[] array_1 = new int[26];
int[] array_2 = new int[26];
int str_len_1 = str_1.length();
int str_len_2 = str_2.length();
for (int i = 0 ; i < str_len_1 ; i++)
array_1[str_1.charAt(i) - 'a'] += 1;
for (int i = 0 ; i < str_len_2 ; i++)
array_2[str_2.charAt(i) - 'a'] += 1;
for (int i = 0 ; i < 26 ; i++){
if (array_1[i] != 0 && array_2[i] != 0){
for (int j = 0 ; j < Math.min(array_1[i], array_2[i]) ; j++)
System.out.print(((char)(i + 'a')));
}
}
}
public static void main(String[] args) throws IOException{
String my_str_1 = "itsasample";
String my_str_2 = "thisisasample";
System.out.println("The common characters between the two strings in alphabetical order is :
");
common_chars(my_str_1, my_str_2);
}
}출력 결과
The common characters between the two strings in alphabetical order is : aaeilmpsst
코드 동작 원리
Demo라는 이름의 클래스 안에는 common_chars라는 함수가 정의되어 있습니다. 이 함수는 크기가 26인 정수 배열 두 개를 선언하는데, 각 배열은 영어 알파벳 26글자에 하나씩 대응됩니다. 두 문자열의 길이는 각각 별도의 변수에 저장됩니다.
그다음 배열을 순회하면서 각 문자의 ASCII 값에서 문자 'a'의 ASCII 값을 뺀 위치의 요소를 1씩 증가시킵니다. 이 과정을 통해 각 문자열에 포함된 문자의 출현 빈도가 배열에 기록되며, 결과적으로 두 문자열에 공통으로 존재하는 문자만 파악할 수 있습니다.
마지막으로 두 배열을 비교하여 각 알파벳 인덱스에서 두 문자열이 모두 해당 문자를 포함하고 있는지 확인하고, 두 빈도 값 중 최솟값(min)만큼 반복 출력함으로써 공통 문자를 알파벳 순서대로 콘솔에 출력합니다.
main 함수에서는 두 개의 샘플 문자열을 정의한 뒤, 이 문자열들을 매개변수로 전달하며 common_chars 함수를 호출합니다. 이 방식은 시간 복잡도 O(n)으로 문자열을 한 번씩만 순회하기 때문에 효율적이며, 중복 문자 처리도 자연스럽게 해결됩니다.