BOJ 15927 회문은 회문아니야!!

Link

우선 문자열이 회문인지 아닌지 판별합니다.
회문이라면 (문자열의 길이)-1이 정답이 될 것이고, 회문이 아니라면 주어진 문자열의 길이가 정답이 될 것입니다.

그렇겠죠?

회문이라면 제일 뒷글자를 지우던 제일 앞글자를 지우던 그게 회문이 아닌 가장 긴 부분문자열이 될 것이고,
회문이 아니라면 그 문자열 자체로 회문이 아닌 가장 긴 부분문자열일 것입니다.

마지막으로 한 문자로만 이루어진 문자열인 경우를 처리해주면 풀립니다.

코드 (C++)

#include <iostream>
#include <algorithm>
#include <string>

using namespace std;

int main(int argc, const char *argv[]) {
cin.tie(nullptr);
ios::sync_with_stdio(false);

string str;
cin >> str;

bool chk = false;
char c = str.at(0);
for (auto i: str) {
if (i != c) {
chk = true;
}
c = i;
}

if (!chk) {
cout << -1 << endl;
} else if (str == string(str.rbegin(), str.rend())) {
cout << str.length() - 1 << endl;
} else {
cout << str.length() << endl;
}

return 0;
}
Total views

댓글

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×