Java算法回文&

时间:2013-11-14 23:47:57

标签: java algorithm

/**
 * @(#)palindrome1.java
 *
 * palindrome1 application
 *
 * @author 
 * @version 1.00 2013/11/15
 */

public class palindrome1 {

    static boolean isPalindrome(String str) {
        int count=0;
        //check all characters of sequence is palindrome
        for(int i = 0; i < str.length();i++)
        {
            if(str.charAt(i)!=str.charAt(str.length()-1-i))
            {
                return false;
            }
        }
        //if it is return true otherwise return false
        return true;
    }

    public static void main(String[] args) {

        // TODO, add your application code
        String sentence= "bob gave that pop race car to me." ;
        String sentenceMax="";
        String sentenceNew="";

        sentence = sentence.replace( " ","");
        for(int i = 0;i<sentence.length();i++)
        {
            for(int k=0;k<i;k++)
            {
                sentenceNew = sentence.substring(k,i);
                if(isPalindrome(sentenceNew)&&sentenceNew.length()>sentenceMax.length());
                {

                sentenceMax=sentenceNew;
                sentenceNew="";
                }
            }
        }
        System.out.println(sentenceMax);
    }
}

问题是:t应该询问用户的句子,并在句子中找到最长的回文子字符串,忽略句子中的空格并打印最长的回文子字符串。您必须使用您在B部分中编写的函数。句子必须不区分大小写。 B部分是mycode中第一个名为isPalindrome()的方法。 输出应为:

racecar

但我的代码输出:

e

我的代码出了什么问题?

3 个答案:

答案 0 :(得分:2)

您的代码中包含:

if(isPalindrome(sentenceNew)&&sentenceNew.length()>sentenceMax.length());

;处于不利地位。因为它在那里它将它视为具有空块的if,所以你的实际块{}一直在计算。

应该是:

if(isPalindrome(sentenceNew)&&sentenceNew.length()>sentenceMax.length())

答案 1 :(得分:0)

您正在为每次迭代的sentenceMax分配一个新值。试试这个

sentenceMax += sentenceNew;

答案 2 :(得分:0)

为什么不使用StringBuffer方法?

StringBuffer.reverse()可以反转String 之后,您可以使用StringBuffer.indexOf(subString)搜索还原的Source字符串中的每个子字符串。

这不是一个更简单的方法吗?