美菜网笔试撕代码之回文
手撕代码中回文出现的频率挺高的:
编程实现查找字符串中的最长回文。回文代表左右对称的字符串,如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; } }
结果:
留白:是否还有其他时间复杂度更小的算法