เราได้รับสตริงที่แตกต่างกันสองสตริง สมมติว่า 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