[R54A]制作人员
- 难度 入门
- 时限 1s
- 空限 512m
- 字符串
对于 的数据,,且 中只包含小写字母。
思路
题目要求判断字符串 中是否 同时 包含子串 lzm 和 tom。
由于字符串只含小写字母,可以直接按字节遍历。枚举所有长度为 的连续子串起始位置 (),检查 s[i..i+2] 是否等于 lzm 或 tom,分别用两个布尔变量记录是否出现过。
最终若两个布尔变量均为真,输出 Yes,否则输出 No。
复杂度
- 时间复杂度:,只需一次线性扫描。
- 空间复杂度:,存储输入字符串。
仓颉实现
import std.env.*
main(): Int64 {
let reader = getStdIn()
let s = reader.readln().getOrThrow()
let n = s.size
var hasLzm = false
var hasTom = false
if (n >= 3) {
var i = 0
while (i <= n - 3) {
if (s[i] == UInt8(108) && s[i + 1] == UInt8(122) && s[i + 2] == UInt8(109)) {
hasLzm = true
} else if (s[i] == UInt8(116) && s[i + 1] == UInt8(111) && s[i + 2] == UInt8(109)) {
hasTom = true
}
i += 1
}
}
if (hasLzm && hasTom) {
println("Yes")
} else {
println("No")
}
return 0
}