-1

所以我被分配了以下问题,我什至不知道从哪里开始。他想从数组中提取回文吗?我在网上所做的所有关于回文的研究,都没有使用布尔值。提前致谢。至少可以说,编程不是我的强项。

问题 2.1。(5 分) 编写一个程序,接受以句点结尾的字符串,并判断该字符串(没有句点)是否为回文。假设输入只包含字母和空格。还假设输入的长度最多为 30 个字符。在确定字符串是否为回文时忽略空格,并认为同一字母的大写和小写版本是等效的。提供一个静态方法回文

 public static boolean palindrome(char[] a, int number)

它接受一个 char 数组,其中包含输入字符串的字符,以及一个定义字符串中字符数的整数。

4

4 回答 4

2

他想让你做的是找出数组中的字符序列是否是回文。您无需返回任何有关它的信息。如果您仍然卡住,这里有一些提示:

  1. String使用s that s 会容易char[]得多。尝试从数组中创建一个字符串并在计算中使用它。
  2. 看起来 number 参数是多余的,但我会很安全并像这样构造字符串:

    new String(a, 0, number)
    
  3. 现在,您可能应该过滤字符串以去除大写字母和空格。这样可以避免不必要的信息。
  4. 现在,也许删除字符串的中间字符,如果有的话。这使得字符数均匀。
  5. 现在将字符串沿中间分开,反转一半,然后比较两半。在那之后,你知道它是否是回文,你就完成了。
于 2013-09-08T23:45:31.710 回答
1

我假设你知道什么是回文。他们要求您编写的方法是回文检测器,具有一些高级功能。您没有构建回文:相反,您检测他们给您的字符串是否是回文。

该算法很简单:您需要两个索引 - 一个星号为零,另一个开始于number-1(回想一下 Java 数组是从零开始的)。在每一边找到下一个非空格字符,转换为大写,然后比较。如果字符不同,则返回false。否则,将两个索引向前推进。一旦他们在中间交叉,返回true

注意:由于某种原因,它们在侧面传递了数组的长度。如果它是 C 中的赋值,这将是有意义的,但在 Java 中它是零意义,因为数组可以向您报告它的长度。

于 2013-09-08T23:50:00.350 回答
1

我假设你被允许使用所有的 Java API,在这种情况下Arrays。使用Strings 会更容易做到这一点,但由于要求是使用数组,所以你去:

public static boolean isPalindrome(char[] input, int length)
{    
    // Remember the original array
    char[] original = Arrays.copyOf(input, length);

    char temp;

    // Reverse the array. This could be optimised, it's your call
    for (int i = 0; i < length / 2; i++) 
    {
        temp = input[i];
        input[i] = input[length - 1 - i];
        input[length - 1 - i] = temp;
    }

    // Use the Arrays helper again, to check for equality
    // BE CAREFUL: This is not the same as original.equals(input) !!!
    return Arrays.equals(original, input);
}
于 2013-09-09T00:06:57.587 回答
0

您从字符数组中提取回文。您的方法大概应该接受长度小于 30 的字符数组。然后您必须确定前 n-1 个字符是否构成回文。

一个好的起点是循环比较值的数组的长度,确保记住'A'应该等于'a'。

于 2013-09-08T23:47:38.020 回答