解释一下斑马那道题,先读题,将串分割为两个子串后分别翻转,再将翻转后的子串拼接,这个拼接操作不允许调换原本两串的先后顺序(即a+b子串不允许拼接为b+a),题目没有描述清晰。  按照这个题意分析题中的一系列操作有什么性质: 举个栗子,现有串“12345”; 从3、4之间切,俩子串为“123”、“45”; 分别翻转,为“321”、“54”; 拼接,为“32154”; 这时候如果把整个串翻转一次(这步不是题目要求对,是为了更清晰地分析题中操作的性质),是不影响本题所求的最长连续相间串长的,翻转后结果为“45123”; 而“45123”是将原串“12345”做“123|45”分割后进行循环移位的结果:对串进行循环左移(或右移)使分割处‘|’位于串的起始(右移对应的是结束)位置,得到“|45123”; 由于进行一次循环移位的移动位数没有限制(位数由分割方式决定),多次循环移位操作的结果都可以由一次循环移位操作得到(可移0到(length(string)-1)位),因此只需分析一次循环移位操作即可——问题转化为寻找循环移位后串的最长连续相间串,于是自然地想到复制一份自身接到尾巴后,扫描一遍这个两倍串得到的答案即为所求。
点赞 评论

相关推荐

牛客网
牛客企业服务