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

leetcode——分割两个字符串得到一个回文字符串(java)

给你两个字符串 ab ,它们长度相同。请你选择一个下标,将两个字符串都在 相同的下标 分割开。由 a 可以得到两个字符串: aprefixasuffix ,满足 a = aprefix + asuffix ,同理,由 b 可以得到两个字符串 bprefixbsuffix ,满足 b = bprefix + bsuffix 。请你判断 aprefix + bsuffix 或者 bprefix + asuffix 能否构成回文串。

当你将一个字符串 s 分割成 sprefixssuffix 时, ssuffix 或者 sprefix 可以为空。比方说, s = "abc" 那么 "" + "abc""a" + "bc" "ab" + "c""abc" + "" 都是合法分割。

如果 能构成回文字符串 ,那么请返回 true,否则返回 false

注意x + y 表示连接字符串 xy

示例 1:

输入:a = "x", b = "y"
输出:true
解释:如果 a 或者 b 是回文串,那么答案一定为 true ,因为你可以如下分割:
aprefix = "", asuffix = "x"
bprefix = "", bsuffix = "y"
那么 aprefix + bsuffix = "" + "y" = "y" 是回文串。

示例 2:

输入:a = "xbdef", b = "xecab"
输出:false

示例 3:

输入:a = "ulacfd", b = "jizalu"
输出:true
解释:在下标为 3 处分割:
aprefix = "ula", asuffix = "cfd"
bprefix = "jiz", bsuffix = "alu"
那么 aprefix + bsuffix = "ula" + "alu" = "ulaalu" 是回文串。

解题方法:(相向双指针)

1.经分析得出这道题需要检查字符串是否为回文字符串,以及a的前缀与b的后缀||a的后缀与b的前缀是否能够组成回文串。

2.所以我们需要两个辅助函数来帮我们完成任务,首先一个辅助函数用来检查该字符串是否为回文字符串,这是用来后面判断剩余的字符串是否为回文串的。

3.然后我们需要用另一个辅助函数来进行检查切割后的字符串能否组成回文字符串,但是我们不能给切割切割两个字吓到了,我们其实只需要左右双指针就行,一个指向前一个字符串的首位,一个指向另一个字符串的末尾,然后同时移动双指针,判断所指向的元素是否相等即可,最后再判断剩下的字符串是否相等。

class Solution {
    public boolean checkPalindromeFormation(String a, String b) {
        return check(a, b) || check(b, a);
    }
    private boolean check(String a, String b) {
        int i = 0, j = a.length() - 1;
        while (i < j && a.charAt(i) == b.charAt(j)) {
            ++i;
            --j;
        }
        return isPalindrome(a, i, j) || isPalindrome(b, i, j);
    } 
    private boolean isPalindrome(String s, int i, int j) {
        while (i < j && s.charAt(i) == s.charAt(j)) {
            ++i;
            --j;
        }
        return i >= j;
    }
}


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

相关文章:

  • 使用ffmpeg提高mp4压缩比,减小文件体积【windows+ffmpeg+batch脚本】
  • html全局遮罩,通过websocket来实现实时发布公告
  • 【C++课程学习】:C++中的IO流(istream,iostream,fstream,sstream)
  • -bash: /java: cannot execute binary file
  • 周末总结(2024/01/18)
  • RC2在线加密工具
  • C# 中yield关键字:解锁高效迭代的魔法钥匙
  • 【北京迅为】iTOP-4412全能版使用手册-第八十五章 一键烧写QT程序到开发板
  • 批量清理docker 容器日志
  • springboot基于小程序的会宁县周边乡村旅游服务系统
  • ScratchLLMStepByStep:训练自己的Tokenizer
  • JAVA安全—JWT攻防Swagger自动化Druid泄露
  • 03_UI自适应
  • 《AI赋能中国制造2025:智能变革,制造未来》
  • 正态分布检验(JB检验和威尔克检验)和斯皮尔曼相关系数(继上回)
  • 2025年01月18日Github流行趋势
  • 多语言插件i18n Ally的使用
  • Android-Gradle-自动化多渠道打包
  • 【Docker】Supervisor 实现单容器运行多服务进程
  • macOS查看当前项目的 tree 结构
  • 【Envi遥感图像处理】001:Envi5.6完整版下载安装教程
  • 使用Python爬虫获取1688网站实力档案信息
  • 算法(蓝桥杯)贪心算法3——二维数组排序与贪心算法——活动选择
  • linux之进程信号(信号保存 信号处理)
  • 深入浅出 Go语言并发安全字典 sync.Map:原理、使用与优化
  • ESP RainMaker轻量级云平台方案,产品私有云部署,物联网无线应用