一、知识点:

数组、遍历

二、文字分析:

遍历字符串中的每个字符,以当前字符为中心或者以当前字符和下一个字符的中间为中心,分别找出回文子串,并将其加入结果集。最后对结果集按照字典序进行升序排序,并将结果转化为字符串数组进行返回。

三、编程语言:

java

四、正确代码:

import java.util.*;

public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return string字符串一维数组
     */
    public String[] partitionII(String s) {
        List<String> result = new ArrayList<>();
        int length = s.length();
        for (int i = 0; i < length; i++) {
            // 以当前字符为中心的回文子串
            findPalindrome(s, i, i, result);
            // 以当前字符和下一个字符的中间为中心的回文子串
            findPalindrome(s, i, i + 1, result);
        }
        // 对结果集按照字典序进行升序排序
        Collections.sort(result);

        // 去除重复的回文子串
        List<String> uniqueResult = new ArrayList<>();
        for (String str : result) {
            if (!uniqueResult.contains(str)) {
                uniqueResult.add(str);
            }
        }

        return uniqueResult.toArray(new String[0]);
    }

    // 找出以left和right为中心的回文子串
    private void findPalindrome(String s, int left, int right,
                                List<String> result) {
        int length = s.length();
        while (left >= 0 && right < length && s.charAt(left) == s.charAt(right)) {
            // 将找到的回文子串加入结果集
            // 注意:这里不包含长度为1的子串
            if (right - left + 1 > 1) {
                result.add(s.substring(left, right + 1));
            }
            left--;
            right++;
        }
    }
}