解题思路:

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.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论