面试题:给你一串字符串,找出其中最长的对称子序列。 例如:(输入: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 }

 

posted on 2018-04-19 15:53  pangzp  阅读(1427)  评论(0编辑  收藏  举报