우선 문자열이 회문인지 아닌지 판별합니다.
회문이라면 (문자열의 길이)-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; }
|