【华为OD机试真题 JAVA】字符串中相邻且相同字母消除

该程序是一个Java解决方案,用于处理字符串中相邻且相同的字母消除问题。它遍历字符串,消除相邻的重复字符,直至无法继续消除,输出最终字符串的长度。示例包括消除gg得到空串和处理mMbccbc得到mMc的示例。异常输入,即非大小写英文字母,将返回0。
摘要由CSDN通过智能技术生成

  标题:字符串中相邻且相同字母消除 | 时间限制:1秒 | 内存限制:262144K | 语言限制:不限

游戏规则:输入一个只包含英文字母的字符串,字符串中的两个字母如果相邻且相同,就可以消除。在字符串上反复执行消除的动作,直到无法继续消除为止,此时游戏结束。

输出最终得到的字符串长度。

输入描述:

输入原始字符串 str ,只能包含大小写英文字母,字母的大小写敏感, str 长度不超过100。

输出描述:

输出游戏结束后,最终得到的字符串长度

  示例1

  输入

  gg

 输出

 0

 说明

 gg 可以直接消除,得到空串,长度为0

 示例2

  输入

  mMbccbc

  输出

  3

  说明

  在 mMbccbc 中,可以先消除 cc ;此时字符串变成 mMbbc ,可以再消除 bb ;此时字符串变成 mMc ,此时没有相邻且相同的字符,无法继续消除。最终得到的字符串为 mMc ,长度为3

  备注:

  输入中包含 非大小写英文字母 时,均为异常输入,直接返回 0

题解:

import java.util.Scanner;

public class Main_4 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String str = in.nextLine();
        boolean isPass = true;
        for (int i = 0; i < str.length(); i++) {
            char ch = str.charAt(i);
            if (!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z'))) {
                isPass = false;
            }
        }
        if (isPass) System.out.println(eliminate(str).length());
        else  System.out.println(0);
    }
    public static String eliminate(String str) {
        StringBuffer stringBuffer = new StringBuffer(str);
        for (int i = 0; i < stringBuffer.length() - 1; i++) {
            if (stringBuffer.charAt(i) == stringBuffer.charAt(i + 1)) {
                stringBuffer.deleteCharAt(i);
                stringBuffer.deleteCharAt(i);
                break;
            }
        }
        if (stringBuffer.length() == str.length()) {
            return stringBuffer.toString();
        } else {
            return eliminate(stringBuffer.toString());
        }
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

言程序plus

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

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

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

打赏作者

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

抵扣说明:

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

余额充值