สมมติว่าเรามีสองสตริง 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