Find all substrings that are palindromes

后端 未结 9 668
伪装坚强ぢ
伪装坚强ぢ 2020-12-07 21:28

If the input is \'abba\' then the possible palindromes are a, b, b, a, bb, abba.
I understand that determining if string is palindrome is easy. It would be like:

9条回答
  •  南方客
    南方客 (楼主)
    2020-12-07 21:47

    public class PolindromeMyLogic {
    
    static int polindromeCount = 0;
    
    private static HashMap> findCharAndOccurance(
            char[] charArray) {
        HashMap> map = new HashMap>();
        for (int i = 0; i < charArray.length; i++) {
            char c = charArray[i];
            if (map.containsKey(c)) {
                List list = map.get(c);
                list.add(i);
            } else {
                List list = new ArrayList();
                list.add(i);
                map.put(c, list);
            }
        }
        return map;
    }
    
    private static void countPolindromeByPositions(char[] charArray,
            HashMap> map) {
        map.forEach((character, list) -> {
            int n = list.size();
            if (n > 1) {
                for (int i = 0; i < n - 1; i++) {
                    for (int j = i + 1; j < n; j++) {
                        if (list.get(i) + 1 == list.get(j)
                                || list.get(i) + 2 == list.get(j)) {
                            polindromeCount++;
                        } else {
                            char[] temp = new char[(list.get(j) - list.get(i))
                                    + 1];
                            int jj = 0;
                            for (int ii = list.get(i); ii <= list
                                    .get(j); ii++) {
                                temp[jj] = charArray[ii];
                                jj++;
                            }
                            if (isPolindrome(temp))
                                polindromeCount++;
                        }
    
                    }
                }
            }
        });
    }
    
    private static boolean isPolindrome(char[] charArray) {
        int n = charArray.length;
        char[] temp = new char[n];
        int j = 0;
        for (int i = (n - 1); i >= 0; i--) {
            temp[j] = charArray[i];
            j++;
        }
        if (Arrays.equals(charArray, temp))
            return true;
        else
            return false;
    }
    
    public static void main(String[] args) {
        String str = "MADAM";
        char[] charArray = str.toCharArray();
        countPolindromeByPositions(charArray, findCharAndOccurance(charArray));
        System.out.println(polindromeCount);
    }
    }
    

    Try out this. Its my own solution.

提交回复
热议问题