给定一个只有26个小写字母的字符串,可以删除一些字符,要求删除后,循环左移一位与循环右移一位的字符串相同,并且剩余字符串最长,求该长度。
我们首先可以对字符串长度分奇偶性讨论,讨论之后发现,奇数下标和偶数下标对应的字符必须要都相同,因此整个字符串最后最多只会剩下两种字符。
我们可以先考虑一种简单的情况:如果字符串中只有一种字符,那么无论如何移动,字符串都不会改变。所以我们可以遍历所有的字符,对于每种字符,我们计算出如果只保留这种字符,需要删除的最少字符数。
需要考虑字符串中有两种字符的情况。根据上述情况克制,它的奇数位和偶数位上的字符必须是相同的。所以我们可以选择两种字符,一种放在奇数位,一种放在偶数位。
对于每一对字符,我们使用贪心算法来构造最长的字符串。我们维护两个指针,分别指向两种字符的位置列表。我们总是尝试选择位置更大的字符,因为这样可以使得剩余的字符串更长。如果当前位置的字符不能被选择(因为它的位置小于上一个选择的字符的位置),那么我们就移动指针。
本题属于以下题库,请选择所需题库进行购买