문제 풀기/코딩인터뷰
[코딩인터뷰 완전정복] 1.2 순열 확인
MagicDog
2019. 4. 25. 18:58
Q : 문자열 두 개가 주어졌을 때 이 둘이 서로 순열 관계에 있는지 확인하는 메서드를 작성하라.
#include <iostream>
bool CheckIsPermutation(char* str1, char* str2, int len1, int len2);
int main() {
std::ios_base::sync_with_stdio(false);
char string1[100];
char string2[100];
std::cin.getline(string1, 99);
std::cin.getline(string2, 99);
printf("%d\n", CheckIsPermutation(string1, string2, strlen(string1), strlen(string2)));
}
bool CheckIsPermutation(char str1[], char str2[], int len1, int len2) {
if (len1 != len2) return false;
int alphabet[26];
for (int i = 0; i < 26; i++) {
alphabet[i] = 0;
}
for (int i = 0; i < len1; i++) {
if (str1[i] <= 'Z' && str1[i] >= 'A') {
str1[i] -= 'Z' - 'z';
}
if (str2[i] <= 'Z' && str2[i] >= 'A') {
str2[i] -= 'Z' - 'z';
}
alphabet[str1[i] - 'a']++;
alphabet[str2[i] - 'a']--;
}
for (int i = 0; i < 26; i++) {
if (alphabet[i] != 0) {
return false;
}
}
return true;
}
두 문자의 길이가 다르다면 항상 false이다.
두 문자의 길이가 같을경우 알파벳을 담을 수 있는 크기가 26인 배열을 준비한다. (대문자는 소문자로 바꾼다.)
두 문자열의 문자들을 하나씩 읽어들여서 대응하는 문자의 갯수가 서로 같으면 순열이다.