java 回文字符串

Posted iamzhoug37

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 回文字符串相关的知识,希望对你有一定的参考价值。

package string.string1_5;

public class Palindrome
{
    /**
     * 从两头向中间移动
     * @param str
     * @return
     */
    public static boolean isPalindrome(String str)
    {
        if(str == null || str.equals(""))
            return false ;
        int left = 0 ;
        int right = str.length()-1 ;

        while (left < right)
        {
            if(str.charAt(left++) != str.charAt(right--))
                return false ;
        }

        return true ;
    }

    /**
     * 从中间向两头移动
     * @param str
     * @return
     */
    public static boolean isPalindrome2(String str)
    {
        if(str == null || str.equals(""))
            return false ;

        int left = str.length()/2 ;
        int right = str.length()-1-left ;

        while (left >= 0)
        {
            if(str.charAt(left--) != str.charAt(right++))
                return false ;
        }

        return true ;
    }

    /**
     * 判断链表是否为回文
     * @param node
     * @return
     */
    public static boolean isPalindrome3(ListNode node)
    {
        //当链表为空或者链表只包含一个元素
        if(node == null || node.next == null)
            return true ;
        ListNode head = new ListNode() ;
        head.next = node ;
        ListNode slow = head ;
        ListNode quick = head ;

        while (quick.next != null)
        {
            slow = slow.next ;
            for(int i=0 ; i<2 ; i++)
                if(quick.next != null)
                    quick = quick.next ;
                else
                    break ;
        }

        ListNode f = slow.next ;
        slow.next = null ;
        ListNode l = null ;
        ListNode t = null ;

        while (f != null)
        {
            t = f ;
            f = f.next ;
            t.next = l ;
            l = t ;
        }

        slow.next = t ;

        quick = slow.next ;
        slow = node ;

        while (quick != null)
        {
            if(slow.ch != quick.ch)
                return false ;
            slow = slow.next ;
            quick = quick.next ;
        }

        return true ;
    }

    public static void main(String[] args)
    {
/*
        ListNode node1 = new ListNode(‘a‘) ;
        ListNode node2 = new ListNode(‘b‘) ;
        ListNode node3 = new ListNode(‘c‘) ;
        ListNode node4 = new ListNode(‘c‘) ;
        ListNode node5 = new ListNode(‘b‘) ;
        ListNode node6 = new ListNode(‘a‘) ;

        node1.next = node2 ;
        node2.next = node3 ;
        node3.next = node4 ;
        node4.next = node5 ;
        node5.next = node6 ;*/
        ListNode node1 = new ListNode(‘a‘) ;
        ListNode node2 = new ListNode(‘b‘) ;
        ListNode node3 = new ListNode(‘c‘) ;
        ListNode node5 = new ListNode(‘a‘) ;
        ListNode node6 = new ListNode(‘a‘) ;

        node1.next = node2 ;
        node2.next = node3 ;
        node3.next = node5 ;
        node5.next = node6 ;

        System.out.println(isPalindrome3(node1));
    }
}

class ListNode
{
    char ch ;
    ListNode next ;

    public ListNode() {}

    public ListNode(char ch) {
        this.ch = ch;
    }
}

 

以上是关于java 回文字符串的主要内容,如果未能解决你的问题,请参考以下文章

131. 分割回文串

如何在Java中获取字符串的回文

Java 用递归判断字符串是否可以回文

Java 求解最长回文子序列

算法竞赛入门经典 例题 3-4 回文串

(回溯法)Java 求解分割回文串