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