最长对称子序列(java实现)


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

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM