当前位置: 首页 > article >正文

每日一题——分割两个字符串得到回文串

一开始的超时解答:

class Solution { public: bool checkPalindrome(string a) { int len = a.length(); int j = len - 1; for (int i = 0; i < j; i++) { if (a[i] != a[j]) { return false; } j--; } return true; } bool checkPalindromeFormation(string a, string b) { int len = a.length(); if (checkPalindrome(a) || checkPalindrome(b)) { return true; } string temp1 = ""; string temp2 = b; string temp3 = ""; string temp4 = a; for (int i = 0; i < len; i++) { temp1 += a[i]; temp2 = b; temp2 = temp2.erase(0, i+1); temp3 += b[i]; temp4 = a; temp4 = temp4.erase(0, i+1); if (checkPalindrome(temp1 + temp2) || checkPalindrome(temp3 + temp4)) { return true; } } return false; } };

然后发现超时之后进行更正判断,发现只需刨去字符串a与字符串b相同前后缀之后,判断剩余的字符串a/b是不是回文串即可。

class Solution {
public:
    bool checkPalindrome(string a) {
        int j = a.length() - 1;
        for (int i = 0; i < j; i++) {
            if (a[i] != a[j]) {
                return false;
            }
            j--;
        }
        return true;
    }

    string substr(string a, int i) {
        int len = a.length();
        a = a.erase(len - i, len);
        a = a.erase(0, i);
        return a;
    }

    bool checkPalindromeFormation(string a, string b) {
        int len = a.length();
        bool index1 = true;
        bool index2 = true;
        for (int i = 0; i < len; i++) {
            if (index1) {
                if (a[i] == b[len - 1 - i]) {
                    if (i >= len / 2) {
                        return true;
                    }
                }
                else {
                    if (checkPalindrome(substr(a, i)) || checkPalindrome(substr(b, i))) {
                        return true;
                    }
                    index1 = false;
                }
            }
            if (index2) {
                if (b[i] == a[len - 1 - i]) {
                    if (i >= len / 2) {
                        return true;
                    }
                }
                else {
                    if (checkPalindrome(substr(a, i)) || checkPalindrome(substr(b, i))) {
                        return true;
                    }
                    index2 = false;
                }
            }
        }
        return false;
    }
};

示例代码:

class Solution { public: bool f(string a,string b) { int l = 0, r = b.size() - 1; while (l <= r && a[l] == b[r]) ++l,--r; return ff(a,l,r) || ff(b,l,r); } bool ff(string a,int l,int r) { while (l <= r) { if (a[l] != a[r]) return false; ++l,--r; } return true; } bool checkPalindromeFormation(string a, string b) { return f(a,b) || f(b,a); } };


http://www.kler.cn/a/1109.html

相关文章:

  • java项目之房屋租赁系统源码(springboot+mysql+vue)
  • // Error: line 1: XGen: Candidate guides have not been associated!
  • C# GDI+的DrawString无法绘制Tab键的现象
  • 高级软件工程-复习
  • 大型语言模型(LLM)中的tokens是什么
  • TDC-GP30 Data Sheet
  • 异常体系介绍
  • 【Linux】网络基础(2)
  • HashMap扩容为什么每次都是之前的2倍
  • MySQL必知必会 | 安全、维护、性能
  • MaaS Model as a Service 模型即服务
  • pytorch实现深度神经网络与训练
  • 学习 Python 之 Pygame 开发魂斗罗(一)
  • 全网超详细的vue双向数据绑定的原理
  • Python自动化抖音自动刷视频
  • 通过百度文心一言大模型作画尝鲜,感受国产ChatGPT的“狂飙”
  • 【数据结构】万字深入浅出讲解单链表(附原码 | 超详解)
  • LeetCode刷题——贪心法(C/C++)
  • 【Linux】Linux项目自动化构建工具make makefile
  • 【码字必看】一篇文章带你轻松上手MarkDown
  • 华为nat配置实验:内网能够访问外网,内网服务器80端口映射出去
  • Django 4.0文档学习(一)
  • 移动端适配
  • openstack
  • Kaggle实战入门:泰坦尼克号生生还预测
  • 小黑子—多媒体技术与运用基础知识:一