回文算法是指判斷一個(gè)字符串是否是回文的算法。常用的解決方法是用隊(duì)列和棧來完成字符串的反轉(zhuǎn)和比較工作。在Java中,使用Queue和Stack類來實(shí)現(xiàn)這個(gè)過程。
public static boolean isPalindrome(String word) { Stackstack = new Stack<>(); Queue queue = new LinkedList<>(); for (int i = 0; i< word.length(); i++) { char c = word.charAt(i); stack.push(c); queue.add(c); } while (!stack.isEmpty()) { if (!stack.pop().equals(queue.remove())) { return false; } } return true; }
首先,我們創(chuàng)建一個(gè)棧和隊(duì)列的實(shí)例。對(duì)于字符串中的每個(gè)字符,我們把它壓入棧中并添加到隊(duì)列中。一旦完成這個(gè)過程,我們就可以開始比較兩個(gè)數(shù)據(jù)結(jié)構(gòu)中的元素。通過依次彈出棧中的元素和刪除隊(duì)列中的元素,我們可以比較它們是否相等。如果它們不相等,那么字符串就不是回文的,否則它就是一個(gè)回文字符串。
在以上代碼中,隊(duì)列使用LinkedList類來實(shí)現(xiàn)。Stack類已經(jīng)被Java棄用,而使用Deque來代替則更好,同時(shí)還有避免了潛在的性能問題。
public static boolean isPalindrome(String word) { Dequedeque = new LinkedList<>(); for (char c : word.toCharArray()) { deque.addFirst(c); } StringBuilder sb = new StringBuilder(); while (!deque.isEmpty()) { sb.append(deque.removeFirst()); } return sb.toString().equalsIgnoreCase(word); }
在這個(gè)例子中,我們使用Deque接口的LinkedList實(shí)現(xiàn)類。它提供了類似棧和隊(duì)列的方法。我們首先把每個(gè)字符添加到Deque的前面。接著我們構(gòu)造一個(gè)StringBuilder對(duì)象,并逐個(gè)刪除Deque隊(duì)列中的元素來構(gòu)造一個(gè)反轉(zhuǎn)的字符串。最后,我們比較反轉(zhuǎn)后的字符串是否等于原字符串,并且忽略大小寫.