#AT1942. B - String Shifting
B - String Shifting
B - 字符串移动
得分:200分
问题描述
在一个非空字符串中,左移表示将第一个字符移动到字符串的末尾,右移表示将最后一个字符移动到字符串的开头。
例如,对于字符串abcde
,进行一次左移得到bcdea
,进行两次右移得到deabc
。
给定一个由小写英文字母构成的非空字符串$S$。在进行零次或多次左移和右移操作后,找到得到的字典序最小和字典序最大的字符串。
什么是字典序?
简单来说,字典序是指按照字典中的顺序进行排序。更正式的定义是,下面是用于确定不同字符串$S$和$T$字典序的算法。
下面,设$S_i$表示$S$的第$i$个字符。此外,如果$S$在字典序中小于$T$,我们将表示为$S \lt T$;如果$S$在字典序中大于$T$,我们将表示为$S \gt T$。
- 设$L$是$S$和$T$长度的较小者。对于每个$i=1,2,\dots,L$,我们检查$S_i$和$T_i$是否相等。
- 如果存在一个$i$使得$S_i \neq T_i$,我们设最小的这个$i$为$j$。然后,我们比较$S_j$和$T_j$。如果$S_j$在字母表中比$T_j$靠前,我们确定$S \lt T$并停止;如果$S_j$在字母表中比$T_j$靠后,我们确定$S \gt T$并停止。
- 如果不存在$i$使得$S_i \neq T_i$,我们比较$S$和$T$的长度。如果$S$比$T$短,我们确定$S \lt T$并停止;如果$S$比$T$长,我们确定$S \gt T$并停止。
约束条件
- $S$包含小写英文字母。
- $S$的长度介于$1$和$1000$之间(包含$1$和$1000$)。
输入
输入从标准输入读取,格式如下所示:
输出
输出两行。第一行应该包含$S_{\min}$,第二行应该包含$S_{\max}$。其中,$S_{\min}$和$S_{\max}$分别是零次或多次左移和右移操作后得到的字典序最小和最大的字符串。
aaba
aaab
baaa
通过执行移动操作,我们可以得到四个字符串:aaab
,aaba
,abaa
,baaa
。其中字典序最小的是aaab
,字典序最大的是baaa
。
z
z
z
对于任何一系列操作,结果都是z
。
abracadabra
aabracadabr
racadabraab