如何修复仅支持奇数长度字符串的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
相关产品推荐
相关产品推荐

