Kotlin 创造一个悦耳的词

Kotlin 创造一个悦耳的词,kotlin,Kotlin,英语字母表中的所有字母都分为元音和辅音 如果一个单词没有三个或三个以上的元音或辅音排成一行,就被认为是悦耳的 我的目标是从不和谐的单词中创建悦耳的单词,并输出从给定单词创建悦耳单词所需的最少字符数 示例: 输入: 日程 输出: 一, 输入: 比利格 输出: 二, 代码 fun main() { val word = readLine()!!.toMutableList() checkWord(word) } fun isVowel(c: Char): Boolean {

英语字母表中的所有字母都分为元音和辅音

如果一个单词没有三个或三个以上的元音或辅音排成一行,就被认为是悦耳的

我的目标是从不和谐的单词中创建悦耳的单词,并输出从给定单词创建悦耳单词所需的最少字符数

示例:

输入: 日程 输出: 一,

输入: 比利格 输出: 二,

代码

fun main() {
    val word = readLine()!!.toMutableList()
    checkWord(word)
}

fun isVowel(c: Char): Boolean {
    val vowels = listOf('a', 'e', 'i', 'o', 'u', 'y')
    return c in vowels
}

fun checkWord(word: MutableList<Char>){
    var counter = 0
    for (number in 0 .. word.size - 2) {
        if (isVowel(word[number]) && isVowel(word[number + 1]) && isVowel(word[number + 2])) {
            counter++
            word.add(number + 2, 'b')
//            println(word)
        }
        if (!isVowel(word[number]) && !isVowel(word[number + 1]) && !isVowel(word[number + 2])) {
            counter++
            word.add(number + 2, 'a')
//            println(word)
        }
    }
    println(counter)
}
fun main(){
val word=readLine()!!.toMutableList()
校验字
}
fun是元音(c:Char):布尔值{
val元音=列表('a','e','i','o','u','y')
在元音中返回c
}
有趣的检查词(单词:可变列表){
变量计数器=0
for(0..word.size-2中的数字){
if(Is元音(单词[number])&&Is元音(单词[number+1])&&Is元音(单词[number+2])){
柜台++
添加(数字+2,'b')
//println(word)
}
如果(!Is元音(单词[number])&&&!Is元音(单词[number+1])&&!Is元音(单词[number+2])){
柜台++
添加(数字+2,'a')
//println(word)
}
}
println(计数器)
}

我的代码适用于这些示例,但不适用于像Eeee这样的情况,其中输出应该是8,但我的计数器是6。

让我们分析一下对word的修改:

  • 依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依依
  • 哎哟,哎哟,哎哟
  • 噔噔噔噔噔噔噔噔噔噔
  • 噔噔噔噔噔噔噔噔噔噔噔噔
  • 比比比比
  • 比比比比
  • 比比
  • 比比比
最后两次修改发生在带有索引的字母上,索引大于单词的原始长度。这是因为
for
循环迭代次数取决于单词的原始长度。 我建议您使用
while
循环,因为它的条件总是被重新计算,并且
word.size
将在那里更新

var i = 0
while (i + 2 < word.size) {
    // the same logic
    i++
}
var i=0
而(i+2
由于列表在迭代过程中不断增长,因此for循环永远不会到达列表的末尾。您的代码可以通过替换

for (number in 0 .. word.size - 2) {


字长正在增加,但for循环未扩展。用一段时间来代替。@MohammadOmidvar-tyverymuch@BrownieBrown这些答案对你有帮助吗?谢谢你的详细解释。这对我帮助很大。
放在括号之前<代码>i应仅递增1以使用相同的逻辑。
var number = -1
while (++number < word.size - 1) {
fun checkWord (word: String) {
    var count = 0
    var currentTypeCount = 0
    var lastTypeVowel = true
    for (c in word) {
        if (isVowel(c) == lastTypeVowel) {
            if (++currentTypeCount == 3) {
                count++
                currentTypeCount = 1
            }
        } else {
            lastTypeVowel = !lastTypeVowel
            currentTypeCount = 1
        }
    }
    println(count)
}