คำชี้แจงปัญหา
ด้วยสตริง เราจำเป็นต้องค้นหาจำนวนการหมุนขั้นต่ำที่จำเป็นเพื่อให้ได้สตริงเดียวกัน
ตัวอย่าง
หากสตริงอินพุตคือ "bbbbb" จำเป็นต้องมีการหมุนขั้นต่ำ 1 ครั้ง
อัลกอริทึม
<ก่อน>1. เริ่มต้นผลลัพธ์ =02 สร้างสตริงชั่วคราวเท่ากับสตริงดั้งเดิมที่ต่อกับตัวมันเอง3. ใช้สตริงย่อยของสตริงชั่วคราวที่มีขนาดเท่ากับสตริงเดิมโดยเริ่มจากอักขระตัวที่สอง เช่น ดัชนี 14 เพิ่มตัวนับ5 ตรวจสอบว่าสตริงย่อยเท่ากับสตริงเดิมหรือไม่ ถ้าใช่ ให้แยกวงออก ไปที่ขั้นตอนที่ 2 และทำซ้ำจากดัชนีถัดไปตัวอย่าง
#includeใช้เนมสเปซ std;int getRotationCount (สตริง str) { สตริง temp =str + str; int n =str.length(); สำหรับ (int i =1; i <=n; ++i) { string sub =temp.substr(i, str.size()); ถ้า (str ==ย่อย) { กลับ i; } } return n;}int main() { string str ="bbbbb"; cout <<"นับการหมุน =" < เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้น มันสร้างผลลัพธ์ดังต่อไปนี้
ผลลัพธ์
จำนวนการหมุน =1