在Java中,要检测包含复杂嵌套结构的回文数据,可以使用递归方法
import java.util.List;
public class PalindromeChecker {
public static void main(String[] args) {
// 测试用例
List<Object> complexList = List.of(1, "a", List.of(2, "b", List.of(3, "c", "d")), 4);
System.out.println("Is the complex list a palindrome? " + isPalindrome(complexList));
}
public static boolean isPalindrome(Object obj) {
if (obj == null) {
return true;
}
if (obj instanceof List) {
List<?> list = (List<?>) obj;
int left = 0;
int right = list.size() - 1;
while (left < right) {
Object leftElement = list.get(left);
Object rightElement = list.get(right);
if (!isPalindrome(leftElement)) {
return false;
}
if (!isPalindrome(rightElement)) {
return false;
}
left++;
right--;
}
return true;
} else {
return obj.equals(reverseObject(obj));
}
}
private static Object reverseObject(Object obj) {
if (obj instanceof String) {
return ((String) obj).reverse();
} else if (obj instanceof List) {
List<?> list = (List<?>) obj;
List<Object> reversedList = new ArrayList<>();
for (int i = list.size() - 1; i >= 0; i--) {
reversedList.add(reverseObject(list.get(i)));
}
return reversedList;
} else {
return obj;
}
}
}
在这个示例中,我们定义了一个名为isPalindrome
的方法,它接受一个Object
类型的参数。这个方法首先检查传入的对象是否为null
,如果是,则返回true
。接下来,我们检查对象是否是一个列表,如果是,我们使用双指针方法从列表的两端开始递归地检查每个元素是否为回文。如果所有元素都是回文,那么这个列表就是回文的。
如果对象不是列表,我们将其反转并与原始对象进行比较。如果它们相等,那么这个对象就是回文的。为了反转对象,我们定义了一个名为reverseObject
的辅助方法,它根据对象的类型(字符串或列表)进行相应的反转操作。
在main
方法中,我们创建了一个包含复杂嵌套结构的列表complexList
,并调用isPalindrome
方法检查它是否为回文。输出结果为Is the complex list a palindrome? true
,表示这个复杂嵌套结构的列表是一个回文。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。