Keshawn_lu's Blog

Leetcode 1147. 段式回文

字数统计: 301阅读时长: 1 min
2023/04/12 Share

题目简介:

你会得到一个字符串 text 。你应该把它分成 k 个子字符串 (subtext1, subtext2,…, subtextk) ,要求满足:

  • subtexti非空 字符串
  • 所有子字符串的连接等于 text ( 即subtext_1 + subtext_2 + ... + subtext_k == text )
  • 对于所有 i 的有效值( 即 1 <= i <= k ) ,subtext_i == subtext_{k - i + 1} 均成立

返回k可能最大值。

示例 1:

1
2
3
输入:text = "ghiabcdefhelloadamhelloabcdefghi"
输出:7
解释:我们可以把字符串拆分成 "(ghi)(abcdef)(hello)(adam)(hello)(abcdef)(ghi)"。

提示:

  • 1 <= text.length <= 1000
  • text 仅由小写英文字符组成

思路:

从字符串两端开始寻找最短的相同的前后缀,若找到,则答案数+2,并递归剩余的字符串。

若找不到,则将剩余的字符串整体当做一个回文段,答案+1。

tip:

  • texx.size() == 0,直接return 0

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
int longestDecomposition(string text) {

if(text.size() == 0)
return 0;

for(int i = 0; i < text.size() / 2; i++){

string s1 = text.substr(0, i + 1);
string s2 = text.substr(text.size() - i - 1, i + 1);

if(s1 == s2)
return 2 + longestDecomposition(text.substr(i + 1, text.size() - 2 * (i + 1)));
}

return 1; //找不到, 整个字符串作为一个段式回文, 答案加 1
}
};
CATALOG
  1. 1. 题目简介:
  2. 2. 思路:
  3. 3. 代码如下: