腾讯2017暑期实习生编程题

给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。

输入描述:
 
  

输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.



输出描述:
 
  

对于每组数据,输出一个整数,代表最少需要删除的字符个数。


输入例子:
abcda
google


输出例子:
2
2

 

参考思路

比较简单的想法就是求原字符串和其反串的最大公共子串的长度,然后用原字符串的长度减去这个最大公共子串的长度就得到了最小编辑长度。(注:最大公共子串并不一定要连续的,只要保证出现次序一致即可看作公共子串)

      可以使用   Needleman/Wunsch算法  牺牲内存换取简单的代码和CPU时间。


参考代码
import  java.util.*;
public  class  Main{
     public  static  void  main(String[] args){
         Scanner sc =  new  Scanner(System.in);
         while (sc.hasNext()){
             String str =sc.nextLine();
             char [] strchar = str.toCharArray();
             int  length= strchar.length;
             int [][] dp =  new  int [length][length];
             for ( int  j= 1 ;j
                 dp[j- 1 ][j]=strchar[j- 1 ]==strchar[j]? 0 : 1 ;
                 for ( int  i=j- 2 ;i>- 1 ;i--){
                     if (strchar[i]==strchar[j]){
                         dp[i][j]=dp[i+ 1 ][j- 1 ];
                     } else {
                         dp[i][j]=Math.min(dp[i+ 1 ][j],dp[i][j- 1 ])+ 1 ;
                     }
                 }
             }
         }
     }
}

你可能感兴趣的:(求职问题)