ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่คำนวณเวลาที่ใช้สำหรับสัญญาณเพื่อเข้าถึงตำแหน่งทั้งหมดในสตริง ให้ฉันอธิบายด้วยตัวอย่าง
เราจะมีสตริงที่มีเพียง s และ p ตัวอักษร เป็น สัญญาณ และ p เป็น ตำแหน่ง ในสตริง สัญญาณเริ่มต้นที่ s และเดินทางทั้งทางซ้ายและขวา เราถือว่าต้องใช้เวลาหนึ่งหน่วยในการเดินทางไปยังตำแหน่งถัดไปในสตริง งานของเราคือการคำนวณเวลาที่จำเป็นในการแปลง ตำแหน่ง . ทั้งหมด เป็น สัญญาณ .
มาดูตัวอย่างกัน
ป้อนข้อมูล − ppppppss
ผลผลิต − 5
ป้อนข้อมูล − pspspsp
ผลผลิต − 1
ป้อนข้อมูล − ssssss
ผลผลิต − 0
มาดูขั้นตอนการแก้ปัญหากัน
-
เริ่มต้นสตริงและเวลา (0)
-
วนซ้ำบนสตริง
-
นับต่อเนื่อง p อักขระและเก็บการนับในตัวแปร
-
หากอักขระปัจจุบันคือ s และ p นับมากกว่าครั้งก่อนแล้วตรวจสอบว่า s จะอยู่ทางด้านซ้ายหรือไม่
-
ถ้า s ปรากฏอยู่ทั้งสองข้างแล้วแบ่งการนับออกเป็นสองซีกเป็น s สามารถเดินทางได้ทั้งสองทิศทาง
-
รีเซ็ตจำนวน p .
-
ตัวอย่าง
มาดูโค้ดกันเลย
#include <bits/stdc++.h> using namespace std; int timeToConvertToSignalString(string sample_string, int string_len) { int p_count = 0, time = 0; for (int i = 0; i <= string_len; i++) { if (sample_string[i] == 'p') { p_count++; } else { if (p_count > time) { bool is_present_left_side = false; if (((i - p_count) > 0) && (sample_string[i - p_count - 1] == 's')) { is_present_left_side = 1; } if (is_present_left_side) { p_count = ceil((double)p_count / 2); } time = max(time, p_count); } p_count = 0; } } return time; } int main() { string sample_string = "pppppspss"; int n = sample_string.size(); cout << timeToConvertToSignalString(sample_string, n) << endl; return 0; }
ผลลัพธ์
หากคุณรันโปรแกรมข้างต้น คุณจะได้ผลลัพธ์ดังต่อไปนี้
5
ลองรันโปรแกรมด้วยเคสอื่นแล้วลองดู
บทสรุป
หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น