首页 > 编程语言 >leetcode——分割两个字符串得到一个回文字符串(java)

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

时间:2025-01-18 15:32:56浏览次数:3  
标签:java asuffix String bsuffix 字符串 aprefix leetcode 回文

给你两个字符串 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;
    }
}

标签:java,asuffix,String,bsuffix,字符串,aprefix,leetcode,回文
From: https://blog.csdn.net/W_L_MM/article/details/145228005

相关文章

  • 【LeetCode: 415. 字符串相加 + 双指针】
    ......
  • java流程控制及其循环语句
    用户交互Scanner(IO流跟电脑打交道)基础语法:Scanners=newScanner(System.in);//表示系统数据输入​Scanners=newScanner(System.out);//表示系统数据输出​scanner.close:表示关闭数据流通过Scanner类的n......
  • LeetCode:491.递增子序列
    跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!代码随想录LeetCode:491.递增子序列给你一个整数数组nums,找出并返回所有该数组中不同的递增子序列,递增子序列中至少有两个元素。你可以按任意顺序返回答案。数组中可能含有重复......
  • LeetCode:90.子集II
    跟着carl学算法,本系列博客仅做个人记录,建议大家都去看carl本人的博客,写的真的很好的!代码随想录LeetCode:90.子集II给你一个整数数组nums,其中可能包含重复元素,请你返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。返回的解集中,子集可以按任意顺序排列。......
  • 科普文:算法和数据结构系列【高效的字符串检索结构:字典树Trie树原理、应用及其java示例
    概叙科普文:算法和数据结构系列【算法和数据结构概叙】-CSDN博客科普文:算法和数据结构系列【非线性数据结构:树Tree和堆Heap的原理、应用、以及java实现】-CSDN博客科普文:算法和数据结构系列【树:4叉树、N叉树】_动态维护四叉树-CSDN博客科普文:算法和数据结构系列【二叉树总结......
  • 459. 重复的子字符串
    题目这道题不会,看了卡哥思路,卡哥提供了三种方法。方法一:暴力解法自己写的代码:classSolution{public:boolrepeatedSubstringPattern(strings){intn=s.size();for(intlen=1;len<=n/2;++len){if(n%len!=0......
  • NB!一款基于java开发的漏洞检测工具,集合了泛微、用友、大华、海康、致远、红帆、万户
    1、工具介绍基于https://github.com/yhy0/ExpDemo-JavaFX上添加poc2、工具下载链接:工具下载:工具下载3、新增检测漏洞用友NC-Cloud系统接口getStaffInfo存在SQL注入漏洞用友U8-CloudReleaseRepMngAction存在SQL注入漏洞复现(CNVD-2024-33023)用友U8-CRM系统getDeptName......
  • Java使用sql查询mongodb
    概述MongoDB是一种NoSQL数据库,它使用文档存储数据,与传统的关系型数据库不同。尽管MongoDB不使用SQL进行查询,但有时在熟悉SQL语法的团队中,能够使用SQL查询MongoDB可以大大简化开发工作。本文将详细介绍如何在Java中使用SQL查询MongoDB。工具与依赖要实现这一......
  • JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请
    目录JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)一、什么时候该使用Array.map(),与forEach()的区别是什么?1、什么时候该用Array.map()2、Array.map()与Array.forEach()的......
  • 代码随想录 字符串 test 6(KMP,超详细)
    28.找出字符串中第一个匹配项的下标-力扣(LeetCode)一暴力:        以主串中的每个字符为起点,每次匹配从当前主串的起点和子串的首位开始匹配:匹配成功:返回本次匹配的主串起点。匹配失败:以主串的下一个字符作为新起点,重新尝试匹配。时间复杂度为o(m*n)(m为主串长度,n......