您好,登錄后才能下訂單哦!
在Java中,要檢測包含復(fù)雜嵌套結(jié)構(gòu)的回文數(shù)據(jù),可以使用遞歸方法
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
類型的參數(shù)。這個方法首先檢查傳入的對象是否為null
,如果是,則返回true
。接下來,我們檢查對象是否是一個列表,如果是,我們使用雙指針方法從列表的兩端開始遞歸地檢查每個元素是否為回文。如果所有元素都是回文,那么這個列表就是回文的。
如果對象不是列表,我們將其反轉(zhuǎn)并與原始對象進(jìn)行比較。如果它們相等,那么這個對象就是回文的。為了反轉(zhuǎn)對象,我們定義了一個名為reverseObject
的輔助方法,它根據(jù)對象的類型(字符串或列表)進(jìn)行相應(yīng)的反轉(zhuǎn)操作。
在main
方法中,我們創(chuàng)建了一個包含復(fù)雜嵌套結(jié)構(gòu)的列表complexList
,并調(diào)用isPalindrome
方法檢查它是否為回文。輸出結(jié)果為Is the complex list a palindrome? true
,表示這個復(fù)雜嵌套結(jié)構(gòu)的列表是一個回文。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。