2020秋招——博克校招笔试编程题:回文串

回文串判断&打印给定字符串中的所有回文串

笔试时是纸质的,记错了indexOf()函数和charAt()函数,重大失误emmm,这样逻辑虽然都对了还是要gg,ww,反省中。。。

回文串:aba、bab、aabbaa这样的“镜像”字符串

直接上代码,这里用Java实现

package 博克校招笔试;

public class _01_字符串回文串 {

    public static void main(String[] args) {
        String str1 = "aba";//是回文串
        String str2 = "aabbaa";//是回文串
        String str3 = "abc";//不是回文串
        String str4 = "aabcaa";//不是
        String str5 = "abccbaabbaa";

        //System.out.println(isPalindrome(str4));
        System.out.println(isPalindrome2(str2,0,str2.length()-1));
        //printAllPalindrome(str5);

    }

    //方式一:普通的前后扫描
    public static boolean isPalindrome(String str) {
        int length = str.length();
        int left = 0;
        int right = length - 1;
        while (left < right && str.charAt(left) == str.charAt(right)) {
            left++;
            right--;
        }
        if(left == right || str.charAt(left) == str.charAt(right)) return true;
        return false;
    }

    //方式二:递归
    public static boolean isPalindrome2(String str, int low, int heigh) {
        //奇数位数
        if(low == heigh) return true;
        //偶数位数
        if((low+1) == heigh && str.charAt(low) == str.charAt(heigh)) return true;
        //递归向中心扫描
        if(str.charAt(low) == str.charAt(heigh)) return isPalindrome2(str, ++low, --heigh);
        //失败
        return false;
    }

    /**
     * 打印字符串内的所有回文串
     * 条件:回文字符串长度>=3
     * @param str
     */
    public static void printAllPalindrome(String str) {

        for (int index = 0; index < str.length(); index++) {
            int i = index + 3;
            if(i > str.length()) return;
            while (!isPalindrome(str.substring(index,i)) && i<str.length()){
                i++;
            }
            if (!isPalindrome(str.substring(index, i))) {
                continue;
            }
            System.out.println(str.substring(index, i));
        }
    }
}

你可能感兴趣的:(算法题,2020秋招)