You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复仅支持奇数长度字符串的Kotlin自定义反转算法

问题根因

内层双指针循环的终止条件设置错误:while (charPointerOne != charPointerTwo)仅适用于奇数长度的字符串,当字符串长度为偶数时,左右指针完成所有交换后会直接交叉(左指针大于右指针),永远不会满足相等的条件,因此进入无限循环。

修复方法

仅需修改内层循环的终止条件即可:
将while (charPointerOne != charPointerTwo)替换为while (charPointerOne < charPointerTwo)
修改后只要左指针还位于右指针左侧就继续执行交换逻辑,指针交叉后自动终止循环,可同时兼容奇偶长度的字符串,也不会影响原有排除字符的跳过逻辑。

修复后完整代码
fun main() {
    // 可按需修改输入和排除字符规则
    val userInput = "<strong>Hello World!</strong>"
    val exclusion = "<>/"
    
    val wordsInString = userInput.split(" ")
    var wordsSize = wordsInString.size
    var wordPointer = 0

    while (wordPointer < wordsSize) {
        var currentWord = wordsInString[wordPointer]
        var charArray = currentWord.toCharArray()
    
        var charPointerOne = 0
        var charPointerTwo = currentWord.length - 1
        // 仅修改此处终止条件
        while (charPointerOne < charPointerTwo) {
            if (exclusion.contains(charArray[charPointerOne])) {
                charPointerOne++
            } else if (exclusion.contains(charArray[charPointerTwo])) {
                    charPointerTwo--
                } else {
                    var charToSwtichOne = charArray[charPointerOne]
                    var charToSwitchTwo = charArray[charPointerTwo]
                    charArray[charPointerOne] = charToSwitchTwo
                    charArray[charPointerTwo] = charToSwtichOne
                    charPointerOne++
                    charPointerTwo--
                }
        } 
    wordPointer++
    var outputString = String(charArray)
    print(outputString + " ")
    }
}
效果验证

输入<strong>Hello World!</strong>,设置exclusion为<>/跳过HTML标签字符,运行后输出结果为<strong>olleH !dlroW</strong>,符合需求。偶数长度字符串处理无死循环,排除逻辑正常生效。

内容的提问来源于stack exchange,提问作者j_md

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 15:09:03