判定字符串是否为回文

[!Tip]

本节源代码见Github链接🔗


问题描述

给定一个由多个a字符和b字符组成的字符数组。字符串中有一个特殊的字符X位于串的正中间(例如,ababa...ababXbabab..baaa)。如何判定该字符串是否为回文?


核心思路

由于中间元素是X,所以判断X前后两端字符串的元素是否回文即可。因此,将X前半段元素依次入栈,与X后半段的元素对比,若元素全部相同,即为回文字符串,否则不是回文字符串。


实现代码

【👉🏻>>点击展开查看代码】
        
        /**  
         * 判断字符串是否为回文字符串  
         *  
         * @className: IsPalindrome  
         * @author: Max Solider  
         * @date: 2023-06-08 22:45  
         */public class IsPalindrome {  

            private static LLStack stack = new LLStack();  

            /**  
             * 判断字符串是否回文  
             * @param data 字符串  
             * @return 是否回文  
             */  
            public static boolean isPalindrome(char[] data) {  
                boolean flag = false;  
                for (char c : data) {  
                    if (c == 'X') {  
                       flag = true;  
                       continue;            }  
                    if (!flag) {  
                        stack.push(String.valueOf(c));  
                    }  
                    if (flag) {  
                        if (!stack.pop().equals(String.valueOf(c))) {  
                            return false;  
                        }  
                    }  
                }  
                return true;  
            }  

            public static void main(String[] args) {  
                char[] data = "ababababaXababbabaa".toCharArray();  
                System.out.println("The result of isPalindrome is :" + isPalindrome(data));  
                data = "ababababaXababababa".toCharArray();  
                System.out.println("The result of isPalindrome is :" + isPalindrome(data));  
            }  
        }
        
    

时间复杂度

时间复杂度为O(n),用于扫描长度为n的链表。


空间复杂度

空间复杂度为O(n),用于存储字符串前半段元素。


© MaxSolider all right reserved,powered by Gitbook文件修订时间: 2023-06-08 22:53:33

results matching ""

    No results matching ""