Scala 实现
题目描述:
相对开音节构成的结构为辅音+元音(aeiou)+辅音(r除外)+e,常见的单词有bike、cake等。
给定一个字符串,以空格为分隔符,反转每个单词中的字母,若单词中包含如数字等其他非字母时不进行反转。
反转后计算其中含有相对开音节结构的子串个数(连续的子串中部分字符可以重复)。
输入描述:
输出描述:
示例
输入:
- ekam a ekac
输出:
- 2
说明:
反转后为 make a cake 其中make、cake为相对开音节子串,返回2
输入:
- !ekam a ekekac
输出:
- 2
说明:
- 反转后为!ekam a cakeke 因!ekam含非英文字符所以未反转,其中 cake、keke为相对开音节子串,返回2
示例:
def main(args: Array[String]): Unit = {
// 获取输入
val elems = StdIn.readLine().split(" ").toList
// 记录结果
var res = 0
for (elem <- elems) {
var tmp = '-'
val chars = elem.toCharArray
// 反转字符串
if (elem.replaceAll("[a-z]", "").isEmpty) {
var index = elem.length - 1
for (i <- 0 until chars.length / 2) {
tmp = chars(i)
chars(i) = chars(index)
chars(index) = tmp
index -= 1
}
}
// 判断字符串长度
Breaks.breakable {
if (chars.length < 4) break()
}
for (i <- 0 to chars.length - 4) {
// 判断开音节
if (!isVowel(chars(i))
&& isVowel(chars(i + 1))
&& !isVowel(chars(i + 2))
&& (chars(i + 2) != 'r')
&& (chars(i + 3) == 'e')) res += 1
}
}
// 输出结果
println(res)
}
def isVowel(char: Char): Boolean = {
return char == 'a' | char == 'e' | char == 'i' | char == 'o' | char == 'u'
}