在此挑战中,将为您提供字母字符串作为输入。我们将给定输入的“反字符串”定义为所有字母都颠倒的字符串。例如
AaBbbUy -> aAbBBuY
您应该编写一个程序,该程序将字符串作为输入,并搜索最长的连续子字符串,该子字符串的反字符串也是连续子字符串。这两个子字符串不应重叠。
例如,如果给您字符串
fAbbAcGfaBBagF
粗体部分将是最长的字符串反字符串对。
一旦找到该对,您的程序应将它们分别折叠成一个字符。它应该通过删除每个子字符串的除第一个字符之外的所有字符来实现。例如上面的字符串
fAbbAcGfaBBagF
会成为
fAcGfagF
然后,您的程序应重复该过程,直到最长的字符串反字符串对为单个字符或更短。
例如,使用相同的字符串,折叠后的新最长对是
fAcGfagF
所以我们再次折叠字符串
fAcGag
现在该字符串无法再折叠,因此我们应将其输出。
如果候选对之间是平局(例如AvaVA
),则您可以减少(AaA
或AvV
,但不能Aa
)。
这是代码高尔夫球,因此答案将以字节计分,而字节数越少越好。
测试用例
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
动机
尽管这个问题似乎是任意的,但实际上是我在编写代码以处理基本面时遇到的问题。该过程可以用于将基本多边形减小为较小的n边。我试了一下之后,以为会打一点高尔夫球。
aaaAAAaaa -> aAaaa
呢