Computer >> Máy Tính >  >> Lập trình >> C ++

Số chuỗi trở thành bằng một trong hai chuỗi sau một lần xóa trong C ++

Chúng ta được đưa ra với hai chuỗi khác nhau, giả sử s1 và s2 và nhiệm vụ là tạo thành chuỗi, giả sử S bằng cách kết hợp các chữ cái duy nhất của s1 và s2 và bây giờ hãy kiểm tra xem sau khi xóa một ký tự khỏi chuỗi S, nó có tạo thành một chuỗi không sẽ bằng chuỗi s1 HOẶC s2.

Ví dụ

Đầu vào - string S1 ="utter", string S2 ="butter";

Đầu ra - Số chuỗi trở thành bằng một trong hai chuỗi sau một lần xóa là:1

Giải thích - chúng ta được cung cấp với chuỗi s1 và s2 và chúng ta sẽ từ chuỗi S, tức là 'butter' và bây giờ nếu chúng ta xóa ký tự 'b' khỏi chuỗi S, nó sẽ trở thành 'utter' bằng với chuỗi s1 do đó số đếm là 1.

Đầu vào - string S1 ="fat", string S2 ="rat";

Đầu ra - Số chuỗi trở thành bằng một trong hai chuỗi sau một lần xóa là:2

Giải thích - chúng ta được cung cấp với chuỗi s1 và s2 và chúng ta sẽ tạo thành chuỗi S tức là 'frat' và bây giờ nếu chúng ta xóa ký tự 'rs' khỏi chuỗi S, nó sẽ trở thành 'fat' bằng với chuỗi s1 và nếu chúng ta xóa ký tự 'f' nó sẽ trở thành 'rat' bằng với chuỗi s2 do đó số lượng là 2.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Khai báo hai chuỗi s1 và s2 và tính toán kích thước của chuỗi s1 và chuyển dữ liệu cho hàm để xử lý thêm.
  • Khai báo một số lượng biến và đặt nó là 2 vì đầu ra tối đa có thể có là 2.
  • Khai báo hai biến tạm thời là bắt đầu và kết thúc cho quá trình truyền vòng lặp.
  • Bắt đầu vòng lặp FOR từ 0 cho đến khi có kích thước bằng một chuỗi s1 và bên trong vòng lặp, hãy kiểm tra NẾU s1 [i] không bằng s2, sau đó đặt bắt đầu là i và ngắt
  • Bắt đầu một vòng lặp FOR khác từ tôi cho đến khi chỉ còn một kích thước nhỏ hơn của chuỗi s1 và bên trong vòng lặp, hãy kiểm tra NẾU s1 không bằng s2, sau đó đặt kết thúc là i và ngắt
  • Kiểm tra giá trị IF của end nhỏ hơn, sau đó bắt đầu, sau đó đặt số lượng là 26 * (kích thước của chuỗi s1 + 1) và trả về số lượng.
  • ELSE IF kiểm tra bắt đầu bằng kết thúc sau đó trả về số lượng
  • ELSE, bắt đầu vòng lặp FOR từ i đến bắt đầu +1 cho đến khi kết thúc và bên trong vòng lặp, hãy kiểm tra NẾU s1 [i] không bằng s2 [i-1], sau đó giảm số lượng đi 1 và ngắt
  • Bắt đầu vòng lặp FOR từ i đến bắt đầu + 1 cho đến khi kết thúc và kiểm tra IF s1 [i-1] không bằng s2 [i], sau đó giảm số lượng đi 1 và ngắt
  • Trả lại số lượng.
  • In kết quả.

Ví dụ

#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;
}

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Đầu ra

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