手撕代码之回文

美菜网笔试撕代码之回文

手撕代码中回文出现的频率挺高的:

编程实现查找字符串中的最长回文。回文代表左右对称的字符串,如aba,abba,要求查找字符串中长度最长的回文,

如果有多个长度不同的最长回文,任意返回其一。

输入:cxabaa   返回 aba

输入:xabacaba 返回 abacaba

输入:dsabbad 返回 abba

java上代码:

public class Palindrome {
    public static void main(String[] args) {
    String sstr="cxabaa";
    String strLongest =longestPalin(sstr);
    System.out.println(strLongest);
    }
    public static String Palindrome(String s,int left,int right) {
        //left与right相当于指针移动
        int n = s.length();
        int l = left;
        int r = right;
        while(l>=0 && r<=n-1 && s.charAt(l)==s.charAt(r)) {
            l--;
            r++;
        }
        String sm=s.substring(l+1, r);//substring截取范围starindex-endindex-1
        return sm;
    }
    public static String longestPalin(String s) {
        int n=s.length();
        if(n<=1) {
            return s;
        }
        String  longest = "";
        for (int i = 0; i < s.length()-1; i++) {
            String str = Palindrome(s,i,i);
            if (str.length()>longest.length()) {
                longest = str;
            }
            String str1 = Palindrome(s, i, i+1);
            if (str1.length()>longest.length()) {
                longest = str1;
            }        
        }
        return longest;
    }

}

结果:

留白:是否还有其他时间复杂度更小的算法

 

posted @ 2018-10-17 20:00  小南天门  阅读(203)  评论(0编辑  收藏  举报