HUAWEI 机试题:消除相邻且相同

🌈 Scala 实现

题目描述:

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

输入描述:

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

输出描述:

  • 输出游戏结束后字符串的长度

说明:

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

示例:

输入:

  • mMbccbc

输出:

  • 3

代码:

def main(args: Array[String]): Unit = {

    // 获取输入
    val input = StdIn.readLine().toList

    // 异常情况
    for (elem <- input) {
        if (elem < 'A' | elem > 'z' | (elem > 'Z' & elem < 'a')) {
            println(0)
            return
        }
    }

    var line = new ListBuffer[Char]
    input.foreach(line += _)

    // 标记
    var length = 0
    while (line.length != length) {
        length = line.length
        // 将两两重复的部分删除
        Breaks.breakable {
            for (i <- 0 to line.length - 3) {
                if (line(i) == line(i + 1)) {
                    line.remove(i)
                    line.remove(i)
                    Breaks.break()
                }
            }
        }
    }

    // 输出最终结果
    println(line.length)
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JOEL-T99

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

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

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

打赏作者

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

抵扣说明:

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

余额充值