传说魔镜可以把任何接触镜面的东西变成原来的两倍,不过增加的那部分是反的。例如,对于字符串xy,若把y端接触镜面,则魔镜会把这个字符串变为xyyx;若再用x端接触镜面,则会变成xyyxxyyx。对于一个最终得到的字符串(可能未接触魔镜),请输出没使用魔镜之前,该字符串最初可能的最小长度。
时间: 2023-04-27 09:03:35 浏览: 207
可以求镜面反射
假设最终得到的字符串为s,那么s的长度一定是偶数,因为魔镜每次都会将字符串长度翻倍。
我们可以从s的中间位置开始,向两边扩展,每次判断左右两边的子串是否相等。如果相等,说明这个子串是由镜面反射得到的,可以将其缩小一半,继续向两边扩展。如果不相等,说明这个子串不是由镜面反射得到的,需要将中间位置向左或向右移动一位,继续扩展。
最终得到的最小长度就是扩展的次数加上1(因为最开始的中间位置也算一个扩展)。
阅读全文