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