Допустим, у нас есть строка "ABCAD", теперь нам нужно перебрать все возможные расположения этой строки как по часовой стрелке, так и против часовой стрелки.
Моя уродливая реализация выглядит так:
string s = "ABCAD";
string t ="";
for(int i = 0; i < sz(s); i++){
t = s[i];
for(int j = i+1; ; j++){
if((j) == sz(s)){
j = 0;
}
if(j == i){
break;
}
t+= s[j];
}
cout<<t<<" ";
}
reverse(all(s));
for(int i = 0; i < sz(s); i++){
t = s[i];
for(int j = i+1; ; j++){
if((j) == sz(s)){
j = 0;
}
if(j == i){
break;
}
t+= s[j];
}
cout<<t<<" ";
}
Выход:
AHSAU
HSAUA
SAUAH
AUAHS
UAHSA
UASHA
ASHAU
SHAUA
HAUAS
AUASH
Я знаю, что слишком наивный, AFAIK круговой список был бы лучшим выбором, может кто-нибудь реализовать то же самое более эффективно с помощью STL?