回文(Palindrome)指的是正讀和反讀都相同的詞語或者句子,比如“level”、“racecar”、“A man, a plan, a canal, Panama!”。下面介紹如何使用 Java 中的堆和隊列來判斷一個字符串是否為回文。
使用堆(Heap)來實現:
import java.util.PriorityQueue; public class PalindromeHeap { public boolean isPalindrome(String s) { PriorityQueueheap = new PriorityQueue<>(s.length()); for (int i = 0; i< s.length(); i++) { heap.offer(s.charAt(i)); } StringBuilder sb = new StringBuilder(); while (!heap.isEmpty()) { sb.append(heap.poll()); } return sb.toString().equals(sb.reverse().toString()); } }
首先,將字符串中的每個字符加入到一個堆中。然后將堆中的每個字符依次加入到一個 StringBuilder 中,再將 StringBuilder 反轉。如果反轉后的字符串和原先的字符串相等,那么說明原先的字符串是回文。
使用隊列(Queue)來實現:
import java.util.LinkedList; import java.util.Queue; public class PalindromeQueue { public boolean isPalindrome(String s) { Queuequeue = new LinkedList<>(); for (int i = 0; i< s.length(); i++) { queue.offer(s.charAt(i)); } StringBuilder sb = new StringBuilder(); while (!queue.isEmpty()) { sb.append(queue.poll()); } return sb.toString().equals(sb.reverse().toString()); } }
與使用堆類似,使用隊列也是先將字符串中的每個字符加入到隊列中,然后將隊列中的每個字符依次加入到一個 StringBuilder 中,再將 StringBuilder 反轉。如果反轉后的字符串和原先的字符串相等,那么說明原先的字符串是回文。
綜上所述,使用堆和隊列都可以比較簡單地判斷一個字符串是否為回文,但是在實際應用中,由于隊列的出隊比堆的出隊更快,所以通常使用隊列來實現。