首页 > 代码库 > 回文字符串

回文字符串

题目描述

给出一个长度不超过1000的字符串,判断它是不是回文(顺读,逆读均相同)的。

方法一

拿到题目第一反应就是用堆栈,先将字符串各个字符入栈,然后进栈中的元素全部出栈并构成一个字符串,如果前后两个字符串相同,则代表该字符串是回文。

public class Test {

    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextLine()) {
            if(isPalindromic(scanner.nextLine())) {
                System.out.println("Yes!");
            } else {
                System.out.println("No!");
            }
        }
        scanner.close();
    }
    
    private static boolean isPalindromic(String str) {
        
        // str入栈 //
        Stack stack = new Stack();
        for(int i=0;i<str.length();i++) {
            stack.push(str.charAt(i));
        }
        // str出栈 //
        int i = 0;
        for(i=0;i<str.length();i++) {
            if(str.charAt(i)!=stack.pop()) {
                return false;
            }
        }
        return true;
    }
    
    private static class Stack {
        
        private Node top;
        public Stack() {
            
        }
        public char pop() {
           if(top==null) {
               return 0;
           }
           char result = top.item;
           top = top.next;
           return result;
        }
        public void push(char ch) {
            
            Node node = new Node(ch);
            node.next = top;
            top = node;
        }
        private class Node {
            private char item;
            private Node next;
            public Node(char ch) {
                this.item = ch;
            }
        }
    }
}

 

方法二

后来翻题后讨论,发现了一种更巧妙的方法

public class Test {

    public static void main(String[] args) {
        
        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNextLine()) {
            if(isPalindromic(scanner.nextLine())) {
                System.out.println("Yes!");
            } else {
                System.out.println("No!");
            }
        }
        scanner.close();
    }
    
    
    private static boolean isPalindromic(String str) {
        
        for(int i=0;i<str.length()/2;i++) {
            if(str.charAt(i)!=str.charAt(str.length()-i-1)) {
                return false;
            }
        }
        return true;
    }
    
}

 

回文字符串