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

นับสตริงที่กลายเป็นหนึ่งในสองสตริงหลังลบตัวอักษรหนึ่งตัวใน C++

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