在给定字符串中查找一个回文的子字符串



input is :levelmm输出为:给定的字符串是回文,因为给定的字符串包含的水平是一个回文保持字符,如mm被忽略。

包示例;

import java.util.Scanner;

公共类 exp2 {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    System.out.println("enter the string");
    Scanner scan=new Scanner(System.in);
    String s=scan.nextLine();
    String t="";
    String s1=s.substring(0, s.length()-1);
    for(int i=s1.length()-1;i>=0;i--)
{
    t=t+s.charAt(i);
}
    if(t.equalsIgnoreCase(s1))
    {
        int count=t.length();
        System.out.println("is palindrome"+(count-1));
    }else
    {
        System.out.println("not a palindrome");
    }
}

}但它不能完全工作..

首先,String s1 = s.substring(0, s.length() - 1);行从你的单词中删除了一个字符,这看起来不应该发生。

看起来像你想要创建输入的每个可能的子字符串,看看它是否是一个回文。为了看看某物是否是回文,我提出这个建议:

private static boolean isPalindrome(String word) {
    String reverseWord = "";
    for (int i = word.length() - 1; i > -1; i--) {
        reverseWord += word.toCharArray()[i];
    }
    return reverseWord.equalsIgnoreCase(word);
}

获取每个子字符串更加困难,但可以像这样完成:

private static String[] allSubstrings(String word) {
    int amount = 0;
    for (int i = 0; i < word.length() + 1; i++) {
        amount += i;
    }
    String[] res = new String[amount];
    int index = 0;
    for (int i = 0; i < word.length(); i++) {
        for (int j = i + 1; j < word.length() + 1; j++) {
            res[index] = word.substring(i, j);
            index++;
        }
    }
    return res;
}

现在,由于每个长度为 1 的单词都是回文,我们不希望这样,所以在主要方法中我们可以说一个单词必须超过 1 长。这会产生如下所示的主方法:

public static void main(String[] args) {
    System.out.println("enter the string");
    Scanner scan = new Scanner(System.in);
    String s = scan.nextLine();
    boolean isPal = false;
    for (String word : allSubstrings(s)) {
        if (word.length() > 1 && isPalindrome(word)) {
            isPal = true;
        }
    }
    if (isPal) {
        System.out.println("Is palindrome");
    } else {
        System.out.println("Is not palindrome");
    }
}

我希望这能回答你的问题,祝你编码愉快。

最新更新