【问题标题】:How to check if a word is a palindrome based on the length of the word entered by user? no arrays please如何根据用户输入的单词长度判断一个单词是否为回文?请不要排列
【发布时间】:2023-01-11 12:11:54
【问题描述】:

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

这是我写的一个小方法,如果输入的单词是回文,它返回 true(这不是我的问题要问的,我认为这是我可以建立的东西。当然我会返回一个字符串,所以我会使返回类型为“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;
} 

【问题讨论】:

  • 给定句子 ie racecar,然后你想根据给定的长度提取一个更小的回文?我想你先检查一下,原来的句子是奇数还是偶数?如果是奇数,如果长度是奇数,则只能返回有效的较短回文,同样适用于偶数。那么你想检查字符串的中点是多少?并依赖于此,例如使用.substring(midpoint-x, midpoint+x)
  • 你的public boolean printPalindrome(String sentence, int size)应该只要检查sentence是否是回文。因此,它不需要 size 参数。 (此外,它可以是 static,因为它不使用任何实例变量,并且您不需要实例来使用它。)现在,创建另一个具有循环的方法。在每次迭代中,调用 printPalindrome 传递用户输入的 substring
  • 题外话:风格建议:带有boolean的方法可以返回布尔表达式:return sentence.toLowerCase().equals(reverseStr.toLowerCase());
  • @OldDogProgrammer 你是对的,我之前正在尝试一些东西,但我忘了删除参数!非常感谢,这很有帮助!!!

标签: java string for-loop substring palindrome


【解决方案1】:

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

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);
        StringBuilder reverseStr = new StringBuilder(miniStr);
        if (reverseStr.reverse().toString().equals(miniStr)) return miniStr;
    }
    return "";
}

【讨论】:

    【解决方案2】:

    这个够小了吧?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多