如何根据用户输入的单词长度判断单词是否为回文?请不要使用数组



我想知道如何编写一个小的java方法,允许用户输入一个句子,程序将返回句子中的所有回文。顺便说一句:回文是一个前后相同的单词。首先,我创建了一个方法来检查用户输入的一个单词是否为回文。代码如下所示。现在,我必须弄清楚用户什么时候输入单词的长度。例如:请输入回文:[用户输入:赛车]请输入单词的大小:[用户输入3]这是你的回文:cec[正如你所看到的,新单词的长度是3]我不是特别确定如何获得新的回文。有人能帮帮我吗?请不要使用数组!

这是我写的小方法,如果输入的单词是回文,则返回true(这不是我的问题要问的,我认为这是我可以构建的东西。当然,我将返回一个String,所以我将返回类型设置为'void'。)

public boolean printPalindrome(String sentence, int size)
{
String reverseStr = "";
for(int i = (sentence.length()-1); i>=size; i--)
{
reverseStr += sentence.charAt(i);
}
if(sentence.toLowerCase().equals(reverseStr.toLowerCase()))
return true;
else
return false;
} 

这将返回它得到的第一个回文如果回文的长度大于实际句子的长度则大小将变为句子的最大长度如果没有找到回文则返回一个空字符串

public String printPalindrome(String sentence, int size) {
if (size < 0) return "";
if (size > sentence.length()) size = sentence.length();
for (int i = 0; i + size <= sentence.length(); i++) {
String miniStr = sentence.substring(i, i + size);
String reverseStr = new StringBuilder(miniStr).reverse().toString();
if (reverseStr.equals(miniStr)) return miniStr;
}
return "";
}

从这个例子中,我认为O/p正在寻求帮助,以确定回文是否包含指定长度的较短回文序列。O/P已经证明他/她知道如何编写基本的回文测试。

下面是解决O/p问题的部分代码示例:

public static List<String> findSubPalindromes
(String sentence, int subLength) {

List<String> result = new ArrayList<> ();        

for (int i = 0; i < sentence.length() - subLength; ++i) {
if (isPalindrome (sentence.substring (i, i + subLength))) {
result.add (sentence.substring (i, i + subLength));
}
}
return result;
}

public static boolean isPalindrome (String str) {

int len = str.length() - 1 ;
for (int i = 0; i <= str.length () / 2; ++i) {
if (Character.toLowerCase(str.charAt(i)) != 
Character.toLowerCase(str.charAt(len - i)))
return false;                       
}
return true;
}

这个想法是首先有一个boolean isPalindrome (String)方法。该方法在循环中调用,测试指定长度的每个substring

提示用户输入回文的代码,测试看用户是否输入了回文,提示输入子长度,测试子长度的有效性将在第三种方法中进行,该方法不包含在此答案中。

也许八卦:

传统回文只测试字母,不仅忽略大小写(如在O/p代码中),而且忽略空格和标点符号。例子:"一个人,一个计划,一条运河:巴拿马!"或者"夫人,我是亚当。"此问题尚未解决。

这个够小吗?

public List<String> findPalindromes(String sentence) {
return Arrays.stream(sentence.split(" ")).filter(s -> new StringBuilder(s).reverse().toString().equals(s)).collect(Collectors.toList());
}

最新更新