手撕程式碼之迴文
阿新 • • 發佈:2018-11-11
美菜網筆試撕程式碼之迴文
手撕程式碼中迴文出現的頻率挺高的:
程式設計實現查詢字串中的最長迴文。迴文代表左右對稱的字串,如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; } }
結果:
留白:是否還有其他時間複雜度更小的演算法