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

จำนวนสตริงที่เท่ากับหนึ่งในสองสตริงหลังจากลบหนึ่งครั้งใน C++


เราได้รับสตริงที่แตกต่างกันสองสตริง สมมติว่า s1 และ s2 และงานคือการสร้างสตริง สมมติว่า S โดยการรวมตัวอักษรที่ไม่ซ้ำกันของ s1 และ s2 และตอนนี้ตรวจสอบว่าหลังจากลบอักขระหนึ่งตัวออกจากสตริง S แล้ว จะสร้างสตริงที่ จะเท่ากับสตริง s1 หรือ s2

ตัวอย่าง

อินพุต - สตริง S1 ="พูด", สตริง S2 ="เนย";

ผลลัพธ์ - จำนวนสตริงที่เท่ากับหนึ่งในสองสตริงหลังจากลบหนึ่งครั้งคือ:1

คำอธิบาย - เราได้รับสตริง s1 และ s2 และเราจะจากสตริง S เช่น 'เนย' และตอนนี้หากเราลบตัวอักษร 'b' ออกจากสตริง S มันจะกลายเป็น 'ส่วนท้าย' ซึ่งเท่ากับสตริง s1 ดังนั้นการนับคือ 1

อินพุต - สตริง S1 ="อ้วน", สตริง S2 ="หนู";

ผลลัพธ์ - จำนวนสตริงที่เท่ากับหนึ่งในสองสตริงหลังจากลบหนึ่งครั้งคือ:2

คำอธิบาย - เราได้รับสตริง s1 และ s2 และเราจะสร้างสตริง S เช่น 'frat' และตอนนี้หากเราลบตัวอักษร 'rs' ออกจากสตริง S มันจะกลายเป็น 'อ้วน' ซึ่งเท่ากับสตริง s1 และถ้าเราลบตัวอักษร 'f' จะกลายเป็น 'rat' ซึ่งเท่ากับสตริง s2 ดังนั้นจำนวนจึงเป็น 2

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • ประกาศสองสตริง s1 และ s2 และคำนวณขนาดของสตริง s1 และส่งข้อมูลไปยังฟังก์ชันเพื่อการประมวลผลต่อไป
  • ประกาศจำนวนตัวแปรและตั้งค่าเป็น 2 เนื่องจากเอาต์พุตสูงสุดที่เป็นไปได้คือ 2
  • ประกาศตัวแปรชั่วคราวสองตัวเป็นจุดเริ่มต้นและจุดสิ้นสุดสำหรับการข้ามผ่านแบบวนซ้ำ
  • เริ่มการวนซ้ำ FOR จาก 0 จนถึงขนาดของสตริง s1 และภายในลูปให้ตรวจสอบว่า s1[i] ไม่เท่ากับ s2 ให้ตั้งค่าเริ่มต้นเป็น i และแตก
  • เริ่มลูปอื่น FOR จาก i จนถึงขนาดที่เล็กกว่าของสตริง s1 และภายในลูปให้ตรวจสอบว่า s1 ไม่เท่ากับ s2 ให้ตั้งค่า end เป็น i และแตก
  • ตรวจสอบว่าค่า IF ของ end น้อยกว่าแล้ว start จากนั้นให้นับเป็น 26 * (ขนาดของสตริง s1 + 1) และนับจำนวนการส่งคืน
  • ถ้าเช็ค start เท่ากับ end ให้นับคืน
  • ELSE ให้เริ่มวนลูป FOR จาก i เพื่อเริ่ม +1 จนจบ และภายในลูปตรวจสอบว่า s1[i] ไม่เท่ากับ s2[i-1] ให้ลดจำนวนลง 1 และแตก
  • เริ่มวนซ้ำ FOR จาก i เพื่อเริ่ม + 1 จนจบและตรวจสอบว่า s1[i-1] ไม่เท่ากับ s2[i] จากนั้นให้ลดจำนวนลง 1 และแตก
  • คืนการนับ
  • พิมพ์ผลลัพธ์

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;

int equal_removal(string S1, string S2, int size_S1) {
   int count = 2;
   int start;
   int end;

   for (int i = 0; i < size_S1; ++i) {
      if (S1[i] != S2[i]) {
         start = i;
         break;
      }
   }
   for (int i = size_S1 - 1; i >= 0; i--) {
      if (S1[i] != S2[i]) {
         end = i;
         break;
      }
   }
   if (end < start) {
      count = 26 * (size_S1 + 1);
      return count;
   } else if (start == end) {
      return count;
   } else {
      for (int i = start + 1; i <= end; i++) {
         if (S1[i] != S2[i - 1]) {
            count--;
            break;
         }
      }
      for (int i = start + 1; i <= end; i++) {
         if (S1[i - 1] != S2[i]) {
            count--;
            break;
         }
      }
      return count;
   }
}
int main() {
   string S1 = "utter";
   string S2 = "butter";
   int size_S1 = S1.length();
   cout << "Count of strings that become equal to one of the two strings after one removal are: " << equal_removal(S1, S2, size_S1);
   return 0;
}

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

ผลลัพธ์

Count of strings that become equal to one of the two strings after one removal are: 1