不,一般来说这是错误的(如果我理解正确的话)。当然,它适用于您的回文输入。
请参阅 python 解释器的以下输出,其中输入字符串包括'alabala'
和'alabatta'
。(输出添加了一些空格和换行符。)在第二部分中,第一个比 S 长的后缀的前部是不允许的,即不是 S 的旋转。有关有效的方法,请参见第三部分。
>>> s = 'alabala'; p = s + ''.join(reversed(s))
>>> sorted([p[i:] for i in range(len(p))])
['a', 'aalabala', 'abala', 'abalaalabala', 'ala', 'alaalabala',
'alabala', 'alabalaalabala', 'bala', 'balaalabala', 'la',
'laalabala', 'labala', 'labalaalabala']
>>> s = 'alabatta'; p = s + ''.join(reversed(s))
>>> sorted([p[i:] for i in range(len(p))])
['a', 'aattabala', 'abala', 'abattaattabala', 'ala', 'alabattaattabala',
'attaattabala', 'attabala', 'bala', 'battaattabala', 'la',
'labattaattabala', 'taattabala', 'tabala', 'ttaattabala', 'ttabala']
>>> s = 'alabatta'; p = s + s
>>> sorted([p[i:] for i in range(len(p))])
['a', 'aalabatta', 'abatta', 'abattaalabatta', 'alabatta',
'alabattaalabatta', 'atta', 'attaalabatta', 'batta', 'battaalabatta',
'labatta', 'labattaalabatta', 'ta', 'taalabatta', 'tta', 'ttaalabatta']