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号
浙公网安备 33010602011771号