🌈 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 ❤️