回文是指從前往后和從后往前都一樣的單詞或短語。Java提供了棧和隊列的數據結構可以用來判斷一個字符串是否回文。
首先我們來看看用棧判斷回文的方法。棧是一種后進先出的數據結構,我們可以把字符串的每個字符依次壓入棧中,再依次彈出棧中的字符與原字符串比較,如果相同則繼續比較,直到棧為空或不相同,如果一直相同直到棧為空,那么這個字符串就是回文。
public static boolean isPalindromeByStack(String str) { Stackstack = new Stack<>(); for (int i = 0; i< str.length(); i++) { stack.push(str.charAt(i)); } StringBuilder builder = new StringBuilder(); while (!stack.empty()) { builder.append(stack.pop()); } return builder.toString().equalsIgnoreCase(str); }
以上就是用棧判斷回文的方法。
接下來我們來看看用隊列判斷回文的方法。隊列是一種先進先出的數據結構,我們可以把字符串的每個字符依次加入隊列中,再從隊列頭和隊列尾依次彈出字符進行比較,如果相同則繼續比較,直到隊列為空或不相同,如果一直相同直到隊列為空,那么這個字符串就是回文。
public static boolean isPalindromeByQueue(String str) { Queuequeue = new LinkedList<>(); for (int i = 0; i< str.length(); i++) { queue.offer(str.charAt(i)); } StringBuilder builder = new StringBuilder(); while (!queue.isEmpty()) { builder.append(queue.poll()); } return builder.toString().equalsIgnoreCase(str); }
以上就是用隊列判斷回文的方法。
綜上所述,棧和隊列都可以用來判斷回文。但是棧的空間復雜度較高,因為需要開辟額外的空間來存儲字符。而隊列的空間復雜度較低,并且可以利用LinkedList來實現循環隊列優化空間復雜度,因此推薦使用隊列來判斷回文。