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

ค้นหาเวลาที่ใช้สำหรับสัญญาณเพื่อเข้าถึงตำแหน่งทั้งหมดในสตริง - C++


ในบทช่วยสอนนี้ เราจะเขียนโปรแกรมที่คำนวณเวลาที่ใช้สำหรับสัญญาณเพื่อเข้าถึงตำแหน่งทั้งหมดในสตริง ให้ฉันอธิบายด้วยตัวอย่าง

เราจะมีสตริงที่มีเพียง 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

ลองรันโปรแกรมด้วยเคสอื่นแล้วลองดู

บทสรุป

หากคุณมีข้อสงสัยใดๆ ในบทแนะนำ โปรดระบุในส่วนความคิดเห็น