เราได้รับสตริงสองสตริงที่ต่างกันคือ s1 และ s2 และภารกิจคือสร้างสตริง S โดยรวมตัวอักษรที่ไม่ซ้ำกันของ s1 และ s2 และตรวจสอบว่าหลังจากลบตัวอักษรหนึ่งตัวจาก S แล้ว จะได้สตริงที่เท่ากับ s1 หรือ s2
ตัวอย่าง
Input - string S1 = "utter", string S2 = "butter";
Output - จำนวนสตริงที่กลายเป็นหนึ่งในสองสตริงหลังลบตัวอักษรหนึ่งตัวคือ: 1
คำอธิบาย - เราได้รับ s1 และ s2 และสร้าง S คือ 'butter' และถ้าเราลบ 'b' จาก S จะได้ 'utter' ซึ่งเท่ากับ s1 ดังนั้นจำนวนนับคือ 1
Input - string S1 = "fat", string S2 = "rat";
Output - จำนวนสตริงที่กลายเป็นหนึ่งในสองสตริงหลังลบตัวอักษรหนึ่งตัวคือ: 2
คำอธิบาย - เราได้รับ s1 และ s2 และสร้าง S คือ 'frat' และถ้าเราลบ 'r' จาก S จะได้ 'fat' เท่ากับ s1 และถ้าลบ 'f' จะได้ 'rat' เท่ากับ s2 ดังนั้นจำนวนนับคือ 2
แนวทางที่ใช้ในโปรแกรมด้านล่าง
- ประกาศสตริง s1 และ s2 คำนวณขนาดของ s1 ส่งข้อมูลให้ฟังก์ชันเพื่อประมวลผลต่อ
- ประกาศตัวแปร count ตั้งเป็น 2 เพราะผลลัพธ์สูงสุดที่เป็นไปได้คือ 2
- ประกาศตัวแปรชั่วคราว start และ end สำหรับการวนลูป
- เริ่มลูป FOR จาก 0 ถึงขนาดของ s1 ภายในลูปตรวจสอบ IF s1[i] != s2[i] แล้ว start = i และ break
- เริ่มลูป FOR อีกอันจาก i ถึง size-1 ของ s1 ภายในลูปตรวจสอบ IF s1[i] != s2[i] แล้ว end = i และ break
- ตรวจสอบ IF end < start แล้ว count = 26 * (size_S1 + 1) คืนค่า count
- ELSE IF start == end คืนค่า count
- ELSE เริ่มลูป FOR จาก i = start+1 ถึง end ภายในลูปตรวจสอบ IF s1[i] != s2[i-1] ลด count ลง 1 และ break
- เริ่มลูป FOR จาก i = start+1 ถึง end ตรวจสอบ IF s1[i-1] != s2[i] ลด count ลง 1 และ break
- คืนค่า count
- พิมพ์ผลลัพธ์
ตัวอย่าง
#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