https://www.acmicpc.net/problem/1120
입력으로 주어지는 문자열의 길이가 같을 경우 단순하게 차이를 출력하고, 문자열이 다를 경우 문자열x를 문자열y의 첫번째 인덱스부터 증가시키면서 문자열을 비교하여 같은 문자가 가장 많을때의 인덱스를 찾아 저장한 후 이를 이용하여 새로운 문자열을 만든 후 다시 비교하는 방식으로 문제를 풀었다.
#include<iostream>
#include<string>
using namespace std;
// 두 문자열의 차이를 출력하는 함수
void printDiffrentAlp(string x, string y) {
int count = 0;
for (int i = 0; i < x.size(); i++) {
if (x[i] != y[i]) {
count++;
}
}
cout << count;
}
int main() {
string x;
string y;
string z;
cin >> x >> y;
//문자열 z 초기화
for (int i = 0; i < y.size(); i++) {
z.push_back(' ');
}
//문자열 x와 y의 크기가 같은 경우 차이를 출력
if (x.size() == y.size()) {
printDiffrentAlp(x,y);
}
//크기가 달라 문자열 x에 알파벳을 추가해야하는 경우
else {
int index = 0;
int max = 0;
//x와 y 비교
for (int i = 0; i < y.size()-x.size()+1; i++) {
int countSameAlp = 0; //같은 문자를 count
for (int j = 0; j < x.size(); j++) {
if (x[j] == y[i+j]) {
countSameAlp++;
}
}
if (max < countSameAlp) {
max = countSameAlp;
index = i;
}
}
z.replace(index,x.size(),x); // 해당 인덱스로부터 x의 크기만큼 문자열x로 대체
//나머지 값은 y의 문자열에 맞춰준다.
for (int i = 0; i < y.size(); i++) {
if (z[i] == ' ') {
z[i] = y[i];
}
}
//y와 문자열 z의 차이 출력
printDiffrentAlp(z, y);
}
return 0;
}