检查给定字符串是否为偶奇回文(Java)

2025 年 1 月 6 日 | 阅读 4 分钟

在 sight 的任务中,确定给定字符串 str 是否为奇偶回文数。当偶数索引处的字符构成回文,而奇数索引处的字符独立构成回文时,该字符串被称为奇偶回文数。

示例 1

输入

字符串 str = "zyyxzyyxzy"

输出

是的,给定的字符串是奇偶回文数。

解释

对于给定的字符串 "zyyxzyyxzy",由奇数索引处的字符组成的字符串是 "zyzyz",这是一个奇数索引回文数。由偶数索引处的字符组成的字符串是 "yxyxy",这是一个偶数索引回文数。因此,给定的字符串是奇偶回文数。

示例 2

输入

字符串 str = "aba"

输出

是的,给定的字符串是奇偶回文数。

解释

对于给定的字符串 "aba",由奇数索引处的字符组成的字符串是 "aa",这是一个奇数索引回文数。由偶数索引处的字符组成的字符串是 "b",这是一个偶数索引回文数。因此,给定的字符串是奇偶回文数。

示例 3

输入

字符串 str = "acbba"

输出

否,给定的字符串不是奇偶回文数。

解释

对于给定的字符串 "acbba",由奇数索引处的字符组成的字符串是 "aba",这是一个奇数索引回文数。由偶数索引处的字符组成的字符串是 "ba",这不是一个偶数索引回文数。因此,给定的字符串不是奇偶回文数。

方法:朴素方法

算法

步骤 1:初始化两个指针 l 和 h,分别从字符串的开头和结尾开始。

步骤 2:只要 h 大于 l,就继续循环。

步骤 2.1:验证每次迭代中 l 和 h 处的字符是否相同。

步骤 2.2:如果它们不相同,则返回 false(字符串不是回文数)。

步骤 2.3:如果每个字符都对称匹配,则返回 true(字符串是回文数)。

步骤 3:创建一个名为 odd_palin 的空字符串。

步骤 3.1:从索引 1 开始循环遍历输入字符串,一直到第二个字符,每次将索引增加 2。

步骤 3.2:将奇数索引处的每个字符添加到 odd_palin。

步骤 3.3:返回创建的 odd_palin 字符串。

步骤 4:初始化 even_palin,一个空字符串。

步骤 4.1:从索引 0(第一个字符)开始循环遍历输入字符串,每次将索引增加 2。

步骤 4.2:将偶数索引处的每个字符添加到 even_palin。

步骤 4.3:返回创建的 even_palin 字符串。

步骤 5:使用 checkPalindrome 函数确定偶数索引字符串和奇数索引字符串是否都是回文数。

步骤 5.1:如果两个字符串都是回文数,则打印“是的,给定的字符串是奇偶回文数”。

步骤 5.2:如果任一字符串不是回文数,则打印“否,给定的字符串不是奇偶回文数”。

实施

文件名:EvenOddPalindrome.java

输出

Yes, the given string is Even-Odd Palindrome

复杂度分析

以上代码的时间复杂度为 O(N),其中 'N' 表示给定字符串的长度,空间复杂度为 O(N)。