1. 程式人生 > >手撕程式碼之迴文

手撕程式碼之迴文

美菜網筆試撕程式碼之迴文

手撕程式碼中迴文出現的頻率挺高的:

程式設計實現查詢字串中的最長迴文。迴文代表左右對稱的字串,如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; } }

結果:

留白:是否還有其他時間複雜度更小的演算法