使用栈完成回文数-java

数据结构—栈

问题描述

1.什么是回文数?
答:所谓回文数就是一个数字倒着写和正着写相等。
举例:111,121,1221,12321…:

当然也可以是字符串

举例:aba ,acddca,


**

思路

**
​如题所示了,使用栈思想,先进后出,将需要判断的字符串传入栈中,关于stack常用的两个方法push(),pop(),也就是入栈出栈,可以将stack理解为一个容器,只不过最先进入容器的元素最后出来,如abc为例子,如果里面的元素从里面出来顺序是:c——>b——>a,再按照这个顺序拼接就得到cba,然后再将两个元素对比。

(一想到字符串拼接大家首先会想到StringBuilder提高效率,因为后面需要使用equals再对比,所以就建议使用String)。StringBuilder的equals不能使用?与String的equals有什么区别呢,解决方案往下看

以下代码就是用StringBuilder错误解法:

public static void main(String[] args) {
    //使用栈判断回文数
    System.out.println(hh("121"));
}
static boolean hh(String str){
     Stack<Object> objects = new Stack<>();
     StringBuilder sb=new StringBuilder();
    for (int i = 0; i < str.length(); i++) {
        objects.push(str.charAt(i));
    }
    int len= objects.size();
    for(int i=0;i<len;i++){
        char pop= (char) objects.pop();
       sb.append(pop);
    }
    if(sb.equals(str)){
        return true;
    }
    return false;
}

解决方案:

代码如图,使用的是StringBuilder完成拼接,这个错误我也是琢磨很久下断点也找不出原因的

解决方案:介绍了equals方法是比较两个对象的内容,StringBuilder和String的equals方法的区别添加链接描述

以下是String修改后正确的代码:

public static void main(String[] args) {
    //使用栈判断回文数
    System.out.println(hh("121"));
}
static boolean hh(String str){
     Stack<Object> objects = new Stack<>();
     //a用于拼接
    String a="";
    //将传入的参数push到stcak里面
    for (int i = 0; i < str.length(); i++) {
        objects.push(str.charAt(i));
    }
    int len= objects.size();
    //将stack的元素再pop出来此时顺序改变
    for(int i=0;i<len;i++){
        char pop= (char) objects.pop();
       a=a+pop;
    }
    //出栈的字符串(也就是拼接后的)再与传入的字符串进行比较
    if(a.equals(str)){
        return true;
    }
    return false;
}

----最后如果此文章对你有用请给个三连,会不定时更行基础的数据结构与算法,希望对你有帮助🌹🌹🌹🌹

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值