利用顺序栈方法1顺序栈方法2双指针源代码
利用顺序栈方法1思路:先将字符串的前一半进栈,然后再顺序遍历后一半,如果不同则直接退出,相同则弹栈继续比较下一个,若遍历结束后栈为空则说明每一位都匹配上了,说明是回文。
private static void method1(){
String s = "123456";
ArrayStack stack = new ArrayStack<>();
for (int i = 0; i
顺序栈方法2
思路:若栈不为空或栈顶与当前字符不同则入栈,若栈顶与当前字符相同则弹栈,遍历结束后判断栈是否为空,为空则说明是回文。
ps:此方法不能判断出如"112233"不是回文,当遍历到第二个1时因为栈顶是第一个1,便会弹栈,22和33也是,遍历后栈也是空。
private static void method2() {
String text = "上海自来水来自海上";
ArrayStack stack = new ArrayStack<>();
for (int i = 0; i < text.length(); i++) {
if (text.length() % 2 == 1 && i == text.length() / 2) { //遍历到奇数的中间位置时跳过
continue;
}
char c = text.charAt(i);
if (stack.isEmpty() || c != stack.peek()) {
stack.push(c);
} else {
stack.pop();
}
}
System.out.println(stack.isEmpty());
}
双指针
思路:变量i指向字符串首,j指向字符串末尾,比较i指向的字符和j指向的字符,如果不同则直接返回false,相同则i向前移一位,j向后移一位,继续判断。当i>=j则说明没有不同,循环结束返回true。
private static boolean method3(){
String s = "112233";
for (int i=0,j=s.length()-1; i
源代码
package p0.测试;
import p2.线性结构.ArrarList;
import p2.线性结构.ArrayStack;
import java.util.Comparator;
import java.util.Iterator;
import java.util.Random;
public class Try {
public static void main(String[] args) {
method1();
method2();
System.out.println(method3());
}
private static void method1(){
String s = "123456";
ArrayStack stack = new ArrayStack<>();
for (int i = 0; i stack = new ArrayStack<>();
for (int i = 0; i < text.length(); i++) {
if (text.length() % 2 == 1 && i == text.length() / 2) { //遍历到奇数的中间位置时跳过
continue;
}
char c = text.charAt(i);
if (stack.isEmpty() || c != stack.peek()) {
stack.push(c);
} else {
stack.pop();
}
}
System.out.println(stack.isEmpty());
}
private static boolean method3(){
String s = "112233";
for (int i=0,j=s.length()-1; i 

![判断回文串[Java] 判断回文串[Java]](http://www.mshxw.com/aiimages/31/703481.png)
