首页 > 代码库 > 回文字符串
回文字符串
题目描述
给出一个长度不超过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; } }
回文字符串
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。