Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ต้องหมุนขั้นต่ำเพื่อให้ได้สตริงเดียวกันใน C++


คำชี้แจงปัญหา

ด้วยสตริง เราจำเป็นต้องค้นหาจำนวนการหมุนขั้นต่ำที่จำเป็นเพื่อให้ได้สตริงเดียวกัน

ตัวอย่าง

หากสตริงอินพุตคือ "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