day13

题目描述

力g

关于我投机取巧失败那些事

单纯想利用stringbuilder的方法,所以就想一一删除每个字符然后调用reverse方法,结果就死在了这个删除字符这条路上,利用什么子串还有什么转字符数组然后要删除的地方换成空格,再转成字符串,还有每一次删除都创建一个stringbuilder,然后调他的删除方法生成一个新的stringbuilder,很遗憾都超出时间限制了,总之api的方法以后要慎用了!!!

想到String的replace方法,问了昌神发现replace会把所有的字符都换成另外一个字符,不能换某一索引的,底层还没记牢!!!

展示一个错误

class Solution {
    public boolean validPalindrome(String s) {
        StringBuilder str=new StringBuilder(s);
        if(str.toString().equals(str.reverse().toString())){//StringBuilder类自带的方法
            return true;
        }else{
            for(int i=0;i<s.length();i++){
                //将字符串中的每一个位置上的元素都替换成空字符串
                String str1=s.substring(0,i)+s.substring(i+1);
                 //得到一个新字符串,重复第一次不删除的操作
                StringBuilder str2=new StringBuilder(str1);
                if(str2.toString().equals(str2.reverse().toString())){  
                    return true;
                }   
            }
            return false;   
        }
    }
}

題解

class Solution {
    public boolean validPalindrome(String s) {
        int left=0, right=s.length()-1;
        // 删除某个元素
        while(left<right){
            //出现不等的情况
            if(s.charAt(left)!=s.charAt(right)){
                return valid(s, left+1, right) || valid(s, left, right-1);
                //要么删除左边,要么删除右边
            }
            left++;
            right--;
        }
        return true;
    }
//判断删除后是否回文
    public boolean valid(String s, int left, int right){
        while(left<right){
            if(s.charAt(left)!=s.charAt(right)){
                return false;
            }
            left++;
            right--;
        }
        return true;
    }

}


测试

 一个简单题其实收获挺多的,算法题不能经常想着用api给的方法解决,还有比较对称的问题适合双指针!!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冉卿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值