字符串系列--回文

1.回文字符串

回文,英文palindrome,指一個順著讀和反過來讀都一樣的字符串,比如madam、我愛我,這樣的短句在智力性、趣味性和藝術性上都頗有特色,中國歷史上還有很多有趣的回文詩。
那么,我們的第一個問題就是:判斷一個字串是否是回文?

思路:
前后兩邊逐個對比


2. 單向鏈表判斷回文

判斷一條單向鏈表是不是“回文”

思路:
1.用快慢指針,定位到中間節(jié)點
2.把前半段逆轉方向
3.注意單個節(jié)點的鏈表,奇偶長度的鏈表

    private static boolean isPalindromeList( Node node ){
        if( node == null ){
            return false;
        }
        if( node.next == null ){
            return true;
        }
        Node slow = node;
        Node fast = node;
        boolean isDouble = true;
        while( true ){
            if( fast.next == null ){
                isDouble = false;
                break;
            }
            fast = fast.next;
            if( fast.next == null )
            {
                break;
            }
            else{
                fast = fast.next;
            }
            slow = slow.next;//slow每次走一步
        }
        //這是slow就是中點
        Node center = slow;
        
        Node head2 = center.next;
        
        //把前半段,逆轉順序,如果是奇數(shù),則前半段不包含slow;如果是偶數(shù),則前半段包含slow
        Node head = node;
        Node curr = head.next;
        Node temp;
        head.next = null;
        while( curr != null ){
            
            if( isDouble ){
                if( head == center ){
                    break;//偶數(shù)長度,末尾
                }
            }
            else if( curr == center ){
                break;//奇數(shù)長度,末尾
            }
            
            temp = head;
            head = curr;
            curr = curr.next;
            head.next = temp;
        }
        
        Node head1 = head;
        
        while( head1 != null ){
            if( head1.value != head2.value ){
                return false;
            }
            head1 = head1.next;
            head2 = head2.next;
        }
        
        return true;
    }
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 字符串回文判斷 題目描述: 回文,英文palindrome,指一個順著讀和反過來讀都一樣的字符串,比如madam、...
    MinoyJet閱讀 3,800評論 0 2
  • LeetCode 刷題隨手記 - 第一部分 前 256 題(非會員),僅算法題,的吐槽 https://leetc...
    蕾娜漢默閱讀 17,911評論 2 36
  • 1.把二元查找樹轉變成排序的雙向鏈表 題目: 輸入一棵二元查找樹,將該二元查找樹轉換成一個排序的雙向鏈表。 要求不...
    曲終人散Li閱讀 3,357評論 0 19
  • 最長回文子串——Manacher 算法 1. 問題定義 最長回文字符串問題:給定一個字符串,求它的最長回文子串長度...
    林大鵬閱讀 2,798評論 0 6
  • 1 回文識別基礎 回文通俗地將就是把一個句子或者字符串正過來反過來讀都是一樣的.比如123321就是一個回文. 識...
    少冰三hun甜閱讀 726評論 0 0