using
System;
public
class
Test {
static
string
ReverseArray(
char
[] arr,
int
left,
int
right)
{
char
temp;
while
(left < right) {
temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
return
String.Join(
""
,arr);
}
public
static
bool
RotateAndCheck(
string
str1,
string
str2,
int
d)
{
if
(str1.Length != str2.Length) {
return
false
;
}
string
left_rot_str1=
""
, right_rot_str1=
""
;
bool
left_flag =
true
, right_flag =
true
;
int
len1 = str1.Length;
for
(
int
i = 0; i < len1; i++) {
left_rot_str1+=str1[i];
right_rot_str1+=str1[i];
}
left_rot_str1=ReverseArray(left_rot_str1.ToCharArray(), 0, d - 1);
left_rot_str1=ReverseArray(left_rot_str1.ToCharArray(), d, len1 - 1);
left_rot_str1=ReverseArray(left_rot_str1.ToCharArray(), 0, len1 - 1);
right_rot_str1=ReverseArray(right_rot_str1.ToCharArray(), 0, len1 - d - 1);
right_rot_str1=ReverseArray(right_rot_str1.ToCharArray(), len1 - d, len1 - 1);
right_rot_str1=ReverseArray(right_rot_str1.ToCharArray(), 0, len1 - 1);
for
(
int
i = 0; i < len1; i++) {
if
(left_rot_str1[i] != str2[i]) {
left_flag =
false
;
}
if
(right_rot_str1[i] != str2[i]) {
right_flag =
false
;
}
}
if
(left_flag || right_flag)
return
true
;
return
false
;
}
public
static
void
Main(
string
[] args)
{
string
str1 =
"abcdefg"
;
string
str2 =
"cdefgab"
;
int
d = 2;
d = d % str1.Length;
Console.WriteLine(RotateAndCheck(str1, str2,d) ?
"Yes"
:
"No"
);
}
}