如何计算最小编号。将字符串转换为回文的替换?
Posted
技术标签:
【中文标题】如何计算最小编号。将字符串转换为回文的替换?【英文标题】:How can I compute the minimum no. of replacements to convert a string to make a palindrome? 【发布时间】:2016-10-15 19:20:17 【问题描述】:问题说明通过替换字符串中的字符将字符串转换为回文。 形成的回文串长度必须与原串长度一致。
例如:字符串 abcde,转换为回文,
最少替换次数:2
abcde -> abcba
如果它需要一个特定的子字符串作为结果回文字符串的一部分呢?
示例:字符串需要子字符串“tea”作为结果字符串的一部分
然后 abcdef -> aettea
最少更换:4
【问题讨论】:
【参考方案1】:根据定义,回文数在其中心点的每一侧都是相似的。
对于带有奇数字母的字符串,字符串的最大长度减一并除以二将为您提供要替换的字符数。
(length - 1) / 2 = #charsReplaced
对于偶数长度的字符串,替换字符的最大长度是长度除以二。
length / 2 = #charsReplaced
找到要替换的最少字符数需要按每个字符读取字符串,映射字符串中心点两侧的字符,并确定哪些字符相似。对于每边已经有一个相似字母的每个字母(例如,abcbe 比最大值小 1),您将该数量与最大值分开。
【讨论】:
【参考方案2】:这是一个逻辑问题,但我认为您可以使用我设计的这个算法来计算它:
读取字符串 ex: abcde 获取前半部分 (ab) 检查另一半的反面是否与您的前半部分匹配(ab 等于 de 吗?) 计算不相等的字符数 答案 = 2示例:拉达 上半场:ra 检查另一半的背面:aa 如果相等则匹配:ra = aa 计算不相等字符的数量:1 替换:a = r 然后你得到了你的结果:雷达,1 个字符缺陷。
【讨论】:
以上是关于如何计算最小编号。将字符串转换为回文的替换?的主要内容,如果未能解决你的问题,请参考以下文章
Palindrome Partitioning LightOJ - 1044(回文串最小分割数,O(n^2)预处理子串是否回文)