标签:回文 字符 rom nbsp stack push == 字符串相同 scanner
给出一个长度不超过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; } }
标签:回文 字符 rom nbsp stack push == 字符串相同 scanner
原文地址:http://www.cnblogs.com/fudashi/p/6753838.html