判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串
Applese 的回文串
解析
TAG:思维,想法
可以认为插入和删除是等价的操作。想到这一点,这题就会好做很多。
如果这个串本身就是回文串,答案一定是Yes。
否则我们只需要考虑串中对称的位置不相等的两个字符,分别尝试把它们删掉后判断一下是不是回文的就行了。
参考自:https://ac.nowcoder.com/discuss/153012?type=101
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include <iostream> #include <string> using namespace std;
int check(string s) { int len = s.size(); for(int i = 0; i < len ; i++) { if(s[i] != s[len - 1 - i]) return i; } return -1; }
int main() { ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
string s; cin >> s; int diff = check(s); if(diff == -1) cout << "Yes" << endl; else { string tmp = s; string s1 = s.erase(diff, 1); string s2 = tmp.erase(tmp.size() - 1 - diff, 1); if(check(s1) == -1 || check(s2) == -1) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
|