word删除文字或字母时,会出现多删除一个字母的情况解决

问题描述:

比如这段话:后者对应汽车产业链

选择“后者对应”——删除,会删掉“后者对应汽”,多删个“汽”字。 撤销ctrl;z,就只撤销“汽”字,而不是删掉的五个字。

可能是微软的拼音兼容性出现了问题,按照如下指示:
设置-语言和区域-选项-微软拼音-常规 把兼容性打开就可以了。

以下是使用 Kotlin 解决这个问题的代码: ```kotlin fun canBeEqualFrequency(word: String): Boolean { val freqMap = mutableMapOf<Char, Int>() for (char in word) { freqMap[char] = freqMap.getOrDefault(char, 0) + 1 } val freqSet = freqMap.values.toSet() if (freqSet.size == 1) { return true } if (freqSet.size > 2) { return false } val a = freqSet.elementAt(0) val b = freqSet.elementAt(1) if (a > b) { return checkCanDeleteChar(freqMap, a, b) } else { return checkCanDeleteChar(freqMap, b, a) } } fun checkCanDeleteChar(freqMap: MutableMap<Char, Int>, moreFreq: Int, lessFreq: Int): Boolean { var moreCharCount = 0 var lessCharCount = 0 var moreChar: Char? = null var lessChar: Char? = null for ((char, freq) in freqMap) { if (freq == moreFreq) { moreCharCount++ moreChar = char } else if (freq == lessFreq) { lessCharCount++ lessChar = char } else { return false } if (moreCharCount > 1 || lessCharCount > 1) { return false } } if (moreCharCount == 1 && lessCharCount == 1) { return Math.abs(freqMap[moreChar]!! - freqMap[lessChar]!!) == 1 } else { return true } } ``` 首先,我们需要统计每个符在符串中出现的次数,使用一个 `MutableMap<Char, Int>` 来保存。接着,我们使用一个 `Set<Int>` 来保存所有不同的出现频率,如果 `freqSet.size` 等于 1,说明所有符都出现了相同的次数,那么剩余所有符的出现频率也相同,直接返回 true。如果 `freqSet.size` 大于 2,说明无论删除哪个符都无法让剩余所有符的出现频率相同,直接返回 false。 接下来,我们需要判断剩余出现频率相同的情况。因为只能删除一个符,所以出现次数多的符必须至少有一个。我们假设出现次数多的出现了 a 次,出现次数少的出现了 b 次,如果 a 等于 b,说明所有出现次数都相同,直接返回 true。 如果 a 大于 b,我们需要检查是否可以删除出现次数多的符中的某一个符,使得剩余所有符的出现次数相同。我们先遍历一遍 `freqMap`,找到出现次数多的符和出现次数少的符,如果有出现次数不是 a 或者 b 的符,说明不可能让剩余所有符的出现频率相同,直接返回 false。如果出现次数多的符和出现次数少的符都只出现了一次,我们检查删除出现次数多的符中这个符后,剩余所有符的出现次数是否相同。如果相同,返回 true,否则返回 false。如果出现次数多的符和出现次数少的符都出现了多次,说明无论删除哪个符都无法让剩余所有符的出现频率相同,直接返回 false。 如果 a 小于 b,我们需要检查是否可以删除出现次数少的符中的某一个符,使得剩余所有符的出现次数相同。同样,我们遍历一遍 `freqMap`,找到出现次数多的符和出现次数少的符,如果有出现次数不是 a 或者 b 的符,说明不可能让剩余所有符的出现频率相同,直接返回 false。如果出现次数多的符和出现次数少的符都只出现了一次,我们检查删除出现次数少的符中这个符后,剩余所有符的出现次数是否相同。如果相同,返回 true,否则返回 false。如果出现次数多的符和出现次数少的符都出现了多次,说明无论删除哪个符都无法让剩余所有符的出现频率相同,直接返回 false。 总之,这个算法的间复杂度是 O(n),其中 n 是符串的长度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值