输入为:levelmm 输出为:给定的字符串是回文,因为给定的字符串包含级别是回文,其余字符如mm被忽略。
包装示例;
导入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");
}
}
} 但它无法完全正常工作。
答案 0 :(得分:0)
首先,第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");
}
}
希望这能回答您的问题,并祝您编程愉快。