字符串

1 最长公共前缀

class Solution {
    public String longestCommonPrefix(String[] strs) {
       if (strs==null || strs.length==0) return "";

        int length = strs[0].length();//第一个字符串的长度
        int count = strs.length;//总共有几个字符串
        for (int i = 0; i < length; i++) {//第一个字符串中每一个字符循环
            char c = strs[0].charAt(i); //这个字符
            for (int j = 1; j < count; j++) {//循环所有字符串
                if (i == strs[j].length() || strs[j].charAt(i) != c) {
                    return strs[0].substring(0, i);
                }
            }
        }
        return strs[0];
    }
}

    

2 最长回文子串

一个判断字符串是否为回文字符串的代码:

public boolean vaildPalindromic(char [] array,int left,int right) {
        while(left<right) {
            if(array[left]!=array[right]) {
                return false;
            }
            left++;
            right--;            
        }
        return true;
    }

 1  暴力方法:

class Solution {
    public String longestPalindrome(String s) {
        int len=s.length();
        int maxlen=1;
        int begin=0;
        //将字符串变为字符串数组
        char[] charArray=s.toCharArray();
        //枚举所有长度大于1的子串
        for(int i=0;i<len-1;i++) {
            for(int j=i+1;j<len;j++) {
                if(j-i+1>maxlen&&vaildPalindromic(charArray,i,j)) {
                    maxlen=j-i+1;
                    begin=i;
                }
            }
        }
        
        return s.substring(begin,begin+maxlen);
    }

    
//判断字符串是否为回文字符串
    public boolean vaildPalindromic(char [] array,int left,int right) {
        while(left<right) {
            if(array[left]!=array[right]) {
                return false;
            }
            left++;
            right--;            
        }
        return true;
    }
    }

 2 动态规划

class Solution {
    public String longestPalindrome(String s) {
            int len=s.length();
        int maxlen=1;
        int begin=0;
        //将字符串变为字符串数组
        char[] charArray=s.toCharArray();
        // 动态规划 初始化
        boolean[][] dp=new boolean[len][len];
        for(int i=0;i<len;i++) {
            dp[i][i]=true;
        }
        //填写状态
        // 填表规则:先一列一列的填写,再一行一行的填,
        //保证左下方的单元格先进行计算
        for(int j=1;j<len;j++) {
            for(int i=0;i<j;i++) {
                //判断这个字符串头尾是否相等,不相等直接false
                if(charArray[i]!=charArray[j]) {
                    dp[i][j]=false;
                }else {
                    //如果头尾相等,判断去头去尾是否是回文
                    if (j - i < 3){
                        dp[i][j] = true;
                        }else {
                            //状态转移
                            dp[i][j] = dp[i + 1][j - 1];
                        }
                     if (dp[i][j] && j - i + 1 > maxlen){
                            maxlen = j - i + 1;
                            begin = i;
                        }
                }
            }
        }       
        return s.substring(begin,begin+maxlen);
    }
    }

 3 翻转字符串里的单词

原文地址:https://www.cnblogs.com/focusonoutput/p/13775726.html