删除字符串两端相同字符后的最短长度(java)

问题描述:
给你一个只包含字符 ‘a’,‘b’ 和 ‘c’ 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:

  • 选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。
  • 选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。
  • 前缀和后缀在字符串中任意位置都不能有交集。
  • 前缀和后缀包含的所有字符都要相同。
  • 同时删除前缀和后缀。
    请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。

样例如下:
在这里插入图片描述
代码如下(双指针解决):

public class MinimumLength {
    //给你一个只包含字符 'a','b' 和 'c' 的字符串 s ,你可以执行下面这个操作(5 个步骤)任意次:
    //选择字符串 s 一个 非空 的前缀,这个前缀的所有字符都相同。
    //选择字符串 s 一个 非空 的后缀,这个后缀的所有字符都相同。
    //前缀和后缀在字符串中任意位置都不能有交集。
    //前缀和后缀包含的所有字符都要相同。
    //同时删除前缀和后缀。
    //请你返回对字符串 s 执行上面操作任意次以后(可能 0 次),能得到的 最短长度 。
    public static int minimumLength(String s) {
        int st = 0;//双指针移动
        int end = s.length()-1;
        while (st<end){
            if (s.charAt(st) == s.charAt(end)){
                char temp = s.charAt(st);
                while ( st <= end && s.charAt(st) == temp){
                    st++;
                }
                while (st <= end && s.charAt(end) == temp){
                    end--;
                }
            }else break;
        }
        return  st<=end?(end-st+1):0;
    }

    public static void main(String[] args) {
        System.out.println(minimumLength("ca"));
        System.out.println(minimumLength("cabaabac"));
        System.out.println(minimumLength("aabccabba"));
        System.out.println(minimumLength("bbbbbbbbbbbbbbbbbbbbbbbbbbbabbbbbbbbbbbbbbbccbcbcbccbbabbb"));
    }
}

结果如下:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lianggege88

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

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

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

打赏作者

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

抵扣说明:

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

余额充值