面試題:給你一串字符串,找出其中最長的對稱子序列。 例如:(輸入:qwedfggfdekl ~> 輸出:edfggfde)
思路:分為兩步,對於給定的字符串s先求出其逆序字符串s1,然后比較s和s1的最長相同子串。
1 public class LongestSymmetryString{ 2
3
4 public static String getLongestSymmetryString(String s){ 5 String reverseString = new StringBuffer(s).reverse().toString(); 6 List<String> resultStrList = new ArrayList<>(); 7 int max = 0; 8 int start, end; 9 for(int i=0; i<s.length(); i++) 10 { 11 start = i; 12 for(end = s.length(); ; end--){ 13 if(start >=end) break; 14 String substr = s.substring(start, end); 15 int temp = end - start; 16 if(temp>max && reverseString.contains(substr)) 17 { 18
19 resultStrList.add(substr); 20
21 max = temp; 22 } 23
24 } 25 } 26 int index = resultStrList.size(); 27 return resultStrList.get(index-1); 28 } 29
30 public static void main(String[] args) { 31 // TODO Auto-generated method stub
32 Scanner sb = new Scanner(System.in); 33 while(sb.hasNextLine()) 34 { 35 s = sb.nextLine(); 36 if(s == null) 37 { 38 System.out.println(0); 39 return ; 40 } 41 System.out.println(getLongestSymmetryString(s)); 42 } 43 } 44 }