Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用String.reverse的最长字符串回文_Java_String - Fatal编程技术网

Java 使用String.reverse的最长字符串回文

Java 使用String.reverse的最长字符串回文,java,string,Java,String,我一直在试图解决一个问题,寻找最长的回文字符串。 虽然我可以通过中间元素来实现,但我想通过string.reverse来尝试: 这是我的密码: 疑问:我正在使用string.reverse查找给定字符串的反向,然后尝试比较反向字符串和输入字符串中的每个子字符串,但这不会给出最大回文,但会给出所有可能的回文。。。 另外,我在某个地方犯了一些错误,请帮助我找到 public class StringPalindrome { public static void main(String

我一直在试图解决一个问题,寻找最长的回文字符串。 虽然我可以通过中间元素来实现,但我想通过string.reverse来尝试:

这是我的密码:

疑问:我正在使用string.reverse查找给定字符串的反向,然后尝试比较反向字符串和输入字符串中的每个子字符串,但这不会给出最大回文,但会给出所有可能的回文。。。 另外,我在某个地方犯了一些错误,请帮助我找到

public class StringPalindrome {    
   public static void main(String args[]) {
     StringBuilder strBuilder = new StringBuilder("Shubham");
     StringBuilder a = new StringBuilder("");
     a = strBuilder.reverse(); //Reverse the string and saving it into other string
     for(int i=0;i<strBuilder.length();i++){ // Loop one for begin index
        for(int j=1;i<strBuilder.length() + 1;j++){  // Loop two for end index
           if(a.substring(i, j).equals(strBuilder.substring(i, j))){ // comparing 
           System.out.println(strBuilder.substring(i, j)); //printing palindrome
           }     
        }    
    }
}
public类StringPalindrome{
公共静态void main(字符串参数[]){
StringBuilder strBuilder=新StringBuilder(“Shubham”);
StringBuilder a=新的StringBuilder(“”);
a=strBuilder.reverse();//反转字符串并将其保存到其他字符串中
对于(int i=0;i=0&&right最长.length())
{
最长=回文;
}
回文=展开(字符串,i,i+1);
if(回文.length()>最长.length())
{
最长=回文;
}
}
返回时间最长;
}
公共静态void main(字符串[]args)
{
System.out.println(最长回文(“baraik”);
}
}

所以,最后我发现你在寻找字符串中最长的回文。 观察回文的基本大小写

对于任何给定的索引i(从0到字符串末尾)和j(从字符串末尾到0)

  • j和i的指数相等。他们显然是平等的。单字符字符串是回文

  • i和j的指数正好相差1。即,您正在比较连续字符。如果它们相等,则找到一个2字符的回文

  • 否则,我们有两种方法进入步骤
    1
    2

  • 考虑索引[i,j-1]中的字符串
  • 考虑索引[i+1,j]中的字符串
  • 上述两个条件中的最大值为最长回文的长度

  • 记下步骤1、2、3以从缓存中获取值

    下面是一个打印所有回文的示例实现。这是O(n**2)

    public类StringPalindrome{
    公共静态void main(字符串参数[]){
    int大=0;
    字符串pstr=“”;
    StringBuilder str=新的StringBuilder(“aabbccababhhakllkjiooijpawan-nawap”);
    
    对于(int i=0;i)您的问题是什么?您对“字符串的最长回文”的定义是什么?我无法理解该循环的头尾,但您的代码有很多问题。“字符串的最长回文”对我来说,这仅仅意味着将输入字符串颠倒过来,并将其固定在原始字符串的末尾。…。@T.J.Crowder:你们是来帮助还是和尚其他人的…?我的问题很简单…我找不到找到最长明文的方法,而只是能够找到回文…你能解释一下你期望的输出吗?@ShubhamKumar:我不是在嘲笑。这是真的s真的不清楚你的问题是什么。事实上,在那次评论中,你还没有问过任何问题。我尽力帮助别人(我已经回答了5000多个问题),但你最初的问题(甚至编辑)似乎归结为“请为我调试/编写此代码,”这不是SO的目的。这可能不是你真正的意思,所以请解释你认为代码应该工作的原因。解释让你困惑的是什么。
    public class LongestPalindrome 
    {
    
    static public String expand(String string, int a, int b) 
    {
    if (a > b)
    return null;
    int left = a, right = b;
    while (left >= 0 && right < string.length() && string.charAt(left) == string.charAt(right)) 
    {
    left--;
    right++;
    }
    return string.substring(left + 1, right);
    }
    
    static public String longestPalindrome(String string) 
    {
    if (string == null)
    return null;
    String longest = string.substring(0, 1);
    for (int i = 0; i < string.length() - 1; i++) 
    {
    String palindrome = expand(string, i, i);
    if (palindrome.length() > longest.length()) 
    {
    longest = palindrome;
    }
    palindrome = expand(string, i, i + 1);
    if (palindrome.length() > longest.length()) 
    {
    longest = palindrome;
    }
    }
    return longest;
    }
    
    public static void main(String[] args) 
    {
    System.out.println(longestPalindrome("baraik"));
    }
    
    }
    
    public static int maxPalindrome(char ch[], int i, int j, int cache[][]) {
       if (cache[i][j] != -1) {
           return cache[i][j];
       }
    
       if (i == j) {
           return cache[i][j] = 1;
       }
    
       if (j - i  == 1) {
           return cache[i][j] = (ch[i] == ch[j] ? 2 : 0);
       }
    
       int max = 0;
       //easy if they are equal
       if (ch[i] == ch[j]) {
           int inCount = maxPalindrome(ch, i + 1, j - 1, cache);
            max = inCount == 0 ? 0 : 2 + inCount;
       } 
       //there are 2 ways to go step 3
       maxPalindrome(ch, i + 1, j, cache);
    
       maxPalindrome(ch, i, j - 1, cache);
       return cache[i][j] = max;
    }
    
    public static void main(String[] args) {
        String str = "abbzbasddeeaaaccffertrecca"; 
        char ch[] = str.toCharArray();
        int cache[][] = new int[ch.length][ch.length];
        for (int row[] : cache) {
            Arrays.fill(row, -1);
        }
        maxPalindrome(ch, 0, ch.length - 1, cache);
        //print all the pallindromes
        for (int i = 0; i < cache.length; ++i) {
            for (int j = 0; j < cache.length; ++j) {
                if (cache[i][j] > 0) {
                    System.out.println(str.substring(i, j+1) + " " + cache[i][j]);
                }
            }
        }
    
    }
    
    bb 2
    bzb 3
    z 1
    dd 2
    ee 2
    aa 2
    aaa 3
    a 1
    aa 2
    cc 2
    ff 2
    ertre 5
    rtr 3
    t 1
    cc 2
    
    public class StringPalindrome {    
       public static void main(String args[]) {
           int big=0;
           String pstr ="";
           StringBuilder str = new StringBuilder("aabbccabbabhhakllkjiooijpawan-nawap");
            for(int i=0;i<str.length()-1;i++)
                for(int j=i+1;j<str.length();j++){
                    if(str.charAt(i)== str.charAt(j) && pldrm(str.subSequence(i,j+1).toString()) && big<(j-i)){
                                pstr=str.subSequence(i,j+1).toString();
                                big=j-i;
                                }
                }
            System.out.println(pstr);
               } 
        static boolean pldrm(String str){
            int length=str.length()-1;
            for(int i=0;i<length;i++){
                if(str.charAt(i)!= str.charAt(length-i))
                return false;
            }   
            return true;
        }   
    }