解题思路:
1.字符串s本身回文
aaa
2.全为"lqb"字符,补充另一半即可
lqb ==> bql_lqb
3.前部分回文
ioilqb ==> bql_ioilqb
4.部分回文
bioi_blq ==>ql_bioi_blq
注意事项:
第四种情况在这个网站的输出是:"No",测试数据有误;
但是符合题意,在蓝桥真题卷上可以AC。
参考代码:
//第一部分,可以ac的代码,但是少了第四种情况的分析。
#include <iostream>
using namespace std;
bool ishui(string s){
int n = s.size();
for (int i = 0; i < n / 2; ++i) {
if(s[i] != s[n-i-1]){
return false;
}
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;cin >> t;
while(t--){
string s;cin >> s;
int n = s.size();
if(ishui(s)){
cout << "Yes\n";
continue;
}else{
int end_ = 0;
bool status = true;
for (int i = 0; i < n ; ++i) {
if(s[i] != 'l'&&s[i] != 'q' && s[i] != 'b'){
status = false;
break;
}
}
if(status) {
cout << "Yes\n";
continue;
}else{
string pre_s = "";
for (int i = n-1; i >= 0 ; i--) {
if(s[i] != 'l'&&s[i] != 'q' && s[i] != 'b'){
end_ = i;
break;
}
}
for (int i = 0; i <= end_ ; ++i) {
pre_s += s[i];
}
if(ishui(pre_s)){
cout << "Yes\n";
continue;
}else{
cout << "No\n";
}
}
}
}
return 0;
}
//第二部分,蓝桥真题卷上可以ac的代码,有完整的四种情况的分析。
#include <iostream>
using namespace std;
bool ishui(string s){
int n = s.size();
for (int i = 0; i < n / 2; ++i) {
if(s[i] != s[n-i-1]){
return false;
}
}
return true;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;cin >> t;
while(t--){
string s;cin >> s;
int n = s.size();
if(ishui(s)){
cout << "Yes\n";
continue;
}else{
int start_ = 0,end_ = 0;
bool status = true;
for (int i = 0; i < n ; ++i) {
if(s[i] != 'l'&&s[i] != 'q' && s[i] != 'b'){
start_ = i;
status = false;
break;
}
}
if(status) {
cout << "Yes\n";
continue;
}else{
string pre_s = "";
for (int i = n-1; i >= 0 ; i--) {
if(s[i] != 'l'&&s[i] != 'q' && s[i] != 'b'){
end_ = i;
break;
}
}
for (int i = 0; i <= end_ ; ++i) {
pre_s += s[i];
}
if(ishui(pre_s)){
cout << "Yes\n";
continue;
}else{
string mid_s = "";
for (int i = start_; i <= end_; ++i) {
mid_s +=s[i];
}
if(ishui(mid_s)){
string left_s = "",right_s = "";
for (int i = start_ -1; i >= 0 ; i--) {
left_s += s[i];
}
for (int i = end_ + 1 ; i <= n ; i++) {
right_s += s[i];
}
for (int i = 0; i < left_s.size(); ++i) {
if(left_s[i] !=right_s[i]){
cout << "No\n";
break;
}else if(i == left_s.size()-1){
cout << "Yes\n";
}
}
}else{
cout << "No\n";
continue;
}
}
}
}
}
return 0;
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复