1147. 段式回文
题目链接:1147. 段式回文
方法:贪心
解题思路
若左右较长的字符段能相同,那么将其分为较小的字符段也能相同,因此在最开始判断时,就要遵循原则:能拆尽拆,将其拆为最多字符段的情况。
代码
class Solution {
public:
int longestDecomposition(string text) {
int n = text.length();
int l = 0, r = n, ans = 0;
while (l < r) {
for (int cnt = 1; l + cnt <= r; cnt ++ ) {
string lstr = text.substr(l, cnt);
string rstr = text.substr(r - cnt, cnt);
if (lstr == rstr) {
l +=cnt;
r -= cnt;
ans += 2;
break;
}
}
}
if (l > r) ans -- ; //当l > r时,说明最后一对其实是同一个,需要去掉一个; l == r时,说明回文段刚好为双数,不需要减去。
return ans;
}
};
复杂度分析
时间复杂度:\(O(n)\);
空间复杂度:\(O(1)\)。

浙公网安备 33010602011771号