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인 배열을 준비한다. (대문자는 소문자로 바꾼다.)
두 문자열의 문자들을 하나씩 읽어들여서 대응하는 문자의 갯수가 서로 같으면 순열이다.
'문제 풀기 > 코딩인터뷰' 카테고리의 다른 글
[코딩인터뷰 완전정복] 1.6 문자열 압축 (0) | 2019.05.09 |
---|---|
[코딩인터뷰 완전정복] 1.5 하나 빼기 (0) | 2019.05.09 |
[코딩인터뷰 완전정복] 1.4 회문 순열 (0) | 2019.05.08 |
[코딩인터뷰 완전정복] 1.3 URLify (0) | 2019.05.08 |
[코딩인터뷰 완전정복] 1.1 중복이 없는가 (0) | 2019.04.25 |