0%

1616.分割两个字符串得到回文串

1616.分割两个字符串得到回文串

题目描述:

给出两个长度为 n 的字符串。选择一个下标,将两个字符串在这个位置分割开,得到 aprefixasuffix ,以及 bprefixbsubfix 。判断 aprefix+bsubfixbprefix+asubfix 能否构成回文串。注意空字符串也是合法分割。

数据范围:
1n105

题解:

首先写一个检测字符串 [left,right] 是否是回文串的函数。同时 aprefix+bsubfixbprefix+asubfix 也是两个相同的问题,只需要判断一个,然后交换 ab 再调用一次。

首先使用双指针 left,right 判断 a[left] 的前缀和 b[right] 的后缀是否相等,不相等时,判断 a[left,right],b[left,right] 是否是回文串即可。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class Solution
{
public:
const static int maxn = 1e5 + 10;
const static int maxm = 1e5 + 10;
const static int INF = 0x3f3f3f3f;
bool isPalindrome(string &s, int left, int right)
{
while (left < right)
{
if (s[left] != s[right])
{
return false;
}
left++;
right--;
}
return true;
}
bool check(string &a, string &b)
{
int left = 0, right = b.size() - 1;
while (left < right && a[left] == b[right])
{
left++;
right--;
}
if (left == right)
return true;
if (isPalindrome(b, left, right) || isPalindrome(a, left, right))
{
return true;
}
return false;
}
bool checkPalindromeFormation(string a, string b)
{
return check(a, b) || check(b, a);
}
};
来发评论吧~
Powered By Valine
v1.5.1