其他分享
首页 > 其他分享> > Manacher马拉车 回文串计算

Manacher马拉车 回文串计算

作者:互联网

Manacher(马拉车算法)

## 算法概述 - 用于对字符串中回文串相关的操作 - 如寻找最长回文串 - 时间复杂度 O(n)

算法原理

代码实现

class solution {
    String manacher(String s) {
        if (s.isEmpty()) {
            return "";
        }
        StringBuilder builder = new StringBuilder("^#");
        for (char c : s) {
            builder.append('c');
            builder.append('#');
        }
        builder.append('$');
        char[] str = builder.toString().toCharArray();
        int len = str.length;
        int[] raduis = new int[len];
        int C = -1, R = -1;
        int ans = 0;
        for (int i = 1; i < len - 1; ++i) {
            raduis[i] = i > R ? 1 : Math.max(R - i, raduis[2 * C - i]);
            while (str[i - raduis[i]] == str[i + raduis[i]]) {
                ++raduis[i];
            }
            if (raduis[i] > raduis[ans]) {
                ans = i;
            }
            if (i + raduis[i] > R) {
                R = i + raduis[i];
                C = i;
            }
        }
        int len = raduis[ans] - 1;
        int start = (ans - raduis[ans]) / 2;
        return s.subString(start, start + len);
    }
}

标签:int,Manacher,位置,raduis,str,ans,回文,拉车
来源: https://www.cnblogs.com/Slowbeat/p/15105609.html