循环同构串的定义:不断地将的部分提前到
之前,得到一个新的字符串,这些新的字符串称为循环同构串。
例:的循环同构串为:
,
,
,
。
如果
没有在
的任意一个循环同构串中出现则返回
否则返回字符串代表答案。
循环同构串的定义:不断地将的部分提前到
之前,得到一个新的字符串,这些新的字符串称为循环同构串。
例:的循环同构串为:
,
,
,
。
"aaabaaa","aaaa"
"aaaaaab"
包含
![]()
次并且字典序最小
包括,只由小写字母构成
public class Solution {
/**
*
* @param S1 string字符串 S1
* @param S2 string字符串 S2
* @return string字符串
*/
public String CycleString (String S1, String S2) {
if (!S1.equals(S1.toLowerCase()) || !S2.equals(S2.toLowerCase()) || S1.length() < 1 || S2.length() < 1
|| S1.length() > 100000 || S2.length() > 100000) {
return "IMPOSSIBLE";
}
int len = S1.length();
S1 = S1 + S1 + S1;
int star = S1.indexOf(S2);
if (star < 0)
return "IMPOSSIBLE";
int end = star + S2.length();
int i = star + len;
int t = i;
int cc=0;
int maxC = 0;
while (i >star) {
i--;
if(cc>maxC && i==end){
t = i;
}
if(i>star && i<end){
continue;
}
char j = S1.charAt(i);
if (j < S1.charAt(t) ) {
t = i;
}
else if(j == S1.charAt(t)){
cc++;
} else{
if(cc>maxC && i>star){
maxC=cc;
t = i+1;
}
cc=0;
}
}
return S1.substring(t, t + len);
}
}