สมมติว่าเรามีสองสตริง A และ B เราจะหมุนสตริง A และตรวจสอบว่าตรงกับ B ที่ตำแหน่งใดของการหมุนหรือไม่ ถ้าใช่ ให้คืนค่าจริงหรือเท็จ ตัวอย่างเช่น ถ้า A ='abcde' และ B ='bcdea' คำตอบจะเป็นจริง เนื่องจาก A สามารถแปลงเป็น B หลังจากหมุนได้
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- เมื่อทั้ง A และ B ว่างเปล่า ให้คืนค่า จริง เมื่อทั้งคู่มีความยาวต่างกัน ให้คืนค่าเท็จ
- A :=เชื่อม A หลัง A
- i :=0 และ j :=0
- ในขณะที่ฉัน <ความยาวของ A
- ถ้าความยาวของ A – i + 1 <ความยาวของ B ให้คืนค่าเท็จ
- ในขณะที่ i <ความยาวของ A และ j <ความยาวของ B และ A[i] =B[j]
- เพิ่ม i และ j ขึ้น 1
- ถ้า j =ความยาวของ B คืนค่าเป็นจริง
- ถ้า j ไม่ใช่ 0 ให้ลด i ลง 1
- j :=0
- เพิ่ม i ขึ้น 1
ตัวอย่าง
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
class Solution(object):
def rotateString(self, A, B):
if not A and not B:
return True
if len(A) != len(B):
return False
A = A*2
i = 0
j=0
#print(A,B)
while i < len(A):
if len(A)-i+1<len(B):
return False
while i<len(A) and j < len(B) and A[i] == B[j]:
#print("Here!",i,j)
i+=1
j+=1
if j == len(B):
return True
if j:
i-=1
j=0
i+=1
ob1 = Solution()
print(ob1.rotateString("abcde", "cdeab")) อินพุต
"abcde" "cdeab"
ผลลัพธ์
True