HUAWEI 机试题:找出第一次相同且连续的子串

🌈 Scala 实现

题目描述:

  • 给你两个字符串t和p
  • 要求从t中找到一个和p相同的连续子串,并输出该子串第一个字符的下标

输入描述:

  • 输入文件包括两行 分别表示字符串t和p
  • 保证t的长度不小于p
  • 且t的长度不超过1000000
  • p的长度不超过10000

输出描述:

  • 如果能从t中找到一个和p相等的连续子串
  • 则输出该子串第一个字符在t中的下标
  • 下标从左到右依次为1,2,3,…;
  • 如果不能,则输出 “No”
  • 如果含有多个这样的子串,则输出第一个字符下标最小的

示例

输入:

  • AVERDXIVYERDIAN
  • RDXI

输出:

  • 4

代码:

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

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

    // 第一次匹配成功后,则置为 false
    var flag = true
    // 用于计算匹配到的长度
    var tmpLength = 0
    // 用于记录索引位置
    var index = Int.MaxValue

    // 匹配处理
    for (i <- 0 until t.length) {

        // 从匹配到相同的字符开始,且只完整匹配一次
        if (t(i) == p(0) & flag) {

            // 循环匹配一次 p 的字符
            for (j <- 0 until p.length) {
                if (t(j + i) == p(j)) {
                    tmpLength += 1
                } else {
                    tmpLength = 0
                }
            }

            // 第一次匹配到子字符串后
            if (tmpLength == p.length) {
                index = i + 1
                flag = false
            }
        }
    }

    // 输出最终的结果
    if (index != Int.MaxValue) {
        println(index)
    } else {
        println("No!")
    }
}

 


❤️ END ❤️
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JOEL-T99

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

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

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

打赏作者

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

抵扣说明:

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

余额充值