zoukankan      html  css  js  c++  java
  • Leetcode:5. Longest Palindromic Substring

    一开始题目没读懂,下面是求首末是同一个字符的最长子字符串

    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Map;
    import java.util.Set;
    /*
     * 求首末是同一个字符的最长子字符串
     * */
    public class Sum22 {
        public String longestPalindrome(String s) {
            String string="";
            int max= 0;
            for (int i = 0; i < s.length(); i++) {
                char a = s.charAt(i);
                for (int j = s.length()-1; j >= 0; j--) {
                    char b= s.charAt(j);
                    if(a==b){
                        string = j-i+1>string.length()?s.substring(i,j+1):string;
                    }
                }
            }
            return string;
        }
        public static void main(String[] args) {
            String string = "abcdf";
            System.out.println(string.substring(0,2));
        }
    
    }

    看到是求解最长回文串,也蒙逼了,不会写,这里参考的是:http://blog.csdn.net/linhuanmars/article/details/20888595

     

    public class Sum22 {
        public String longestPalindrome(String s) {
            int len = 0;
            String result = "";
            for (int i = 0; i < 2*s.length()-1; i++) {
                int left = i/2;                       
                int right = i/2;
                if(i%2==1){
                    right++;
                }
                String string = getSubString(s, right, left);
                if(len<string.length()){
                    len = string.length();
                    result = string;
                }
            }
            return result;
        }
        
        public  String  getSubString(String s,int right,int left){
            while(left>=0&&right<s.length()&&s.charAt(right)==s.charAt(left)){  //left,right同时移动,并且在两个字符相同的情况下移动
                left--;     
                right++;
            }            //while结束后,left比实际要的字符串最右侧位置小1,right要大1
            return s.substring(left+1,right);  //substring()是从start位置开始,end-1位置结束,注意不包括end
        }
        public static void main(String[] args) {
        
        }
    
    }

    第二种方法是动态规划,没看太懂   http://blog.csdn.net/linhuanmars/article/details/20888595  http://blog.csdn.net/hopeztm/article/details/7932245

    这里动态规划的思路是 dp[i][j] 表示的是 从i 到 j 的字串,是否是回文串。

    则根据回文的规则我们可以知道:

    如果s[i] == s[j] 那么是否是回文决定于 dp[i+1][ j - 1]

    当 s[i] != s[j] 的时候, dp[i][j] 直接就是 false。

    import sun.net.www.content.text.plain;
    
    
    public class Sum22 {
        public String longestPalindrome(String s) {
            boolean[][] palin = new boolean[s.length()][s.length()];
            if(s.length()==0||s==null){
                return "";
            }
            String res = "";
            int len = 0;
            for (int i = s.length()-1; i >=0; i--) {
                for (int j = i; j < s.length(); j++) {
    //                if(s.charAt(i)==s.charAt(j)&&(j-i<=2||palin[i+1][j-1]==true)){  / //这里j-i<=2的意思是i,j中间只有一个字符,palin[i+1][j-1]是靠里面的子字符串
                        palin[i][j] = true;
                        if(j-i+1>len){
                            res = s.substring(i,j+1);
                            len = j-i+1;
                        }    
                    }
                }
            }
            return res;
        }
        
        
        public static void main(String[] args) {
            boolean[][] palin = new boolean[2][2];
            
            System.out.println(palin[0][0]);
        }
    
    }

  • 相关阅读:
    IOS开发之----设置UITableView背景色和选中背景色
    IOS开发之 ---- iOS8中提示框的使用UIAlertController(UIAlertView和UIActionSheet二合一)
    iOS如何将你的程序打包成ipa
    苹果企业开发者账号申请记录
    UIButton上图片和文字的位置调整
    试图添加进 ScrollerVier 的视图里,默认下移64个像素
    NetworkManger解析 xcode7.0以上要改字段
    iOS 登录功能的实现
    keyboard和 UITextFiled 之间的处理
    curator zookeeper监控。SpiderWatcher
  • 原文地址:https://www.cnblogs.com/Michael2397/p/8036163.html
Copyright © 2011-2022 走看看