LeetCode 1147. 段式回文
题目描述
思路分析
解法一:双指针分段匹配(推荐)
核心思路:
- 使用双指针从两端逐步扩展片段。
- 当左片段等于右片段时,计数加 2 并重置片段。
- 最后若中间仍有未匹配片段,计数加 1。
复杂度分析:
- 时间复杂度:O(n^2),其中 n 表示字符串长度。
- 空间复杂度:O(n),存储片段。
class Solution {
public int longestDecomposition(String text) {
int i = 0;
int j = text.length() - 1;
StringBuilder left = new StringBuilder();
StringBuilder right = new StringBuilder();
int ans = 0;
while (i <= j) {
left.append(text.charAt(i));
right.insert(0, text.charAt(j));
if (left.toString().equals(right.toString())) {
ans += (i == j) ? 1 : 2;
left.setLength(0);
right.setLength(0);
}
i++;
j--;
}
if (left.length() > 0) {
ans++;
}
return ans;
}
}
func longestDecomposition(text string) int {
i, j := 0, len(text)-1
left := make([]byte, 0)
right := make([]byte, 0)
ans := 0
for i <= j {
left = append(left, text[i])
right = append([]byte{text[j]}, right...)
if string(left) == string(right) {
if i == j {
ans++
} else {
ans += 2
}
left = left[:0]
right = right[:0]
}
i++
j--
}
if len(left) > 0 {
ans++
}
return ans
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 5. 最长回文子串 | 中等 | 回文 |
| 516. 最长回文子序列 | 中等 | DP |
| 647. 回文子串 | 中等 | 中心扩展 |
| 1147. 段式回文 | 困难 | 双指针 |
| 1312. 让字符串成为回文串的最少插入次数 | 困难 | DP |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!