Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 한 번 제거한 후 두 문자열 중 하나와 같아지는 문자열 수

<시간/>

s1과 s2라는 두 개의 다른 문자열이 주어지고 작업은 s1과 s2의 고유한 문자를 결합하여 S라고 하는 문자열을 형성하고 이제 문자열 S에서 한 문자를 제거한 후 문자열을 형성하는지 확인합니다. 문자열 s1 또는 s2와 같습니다.

입력 - 문자열 S1 ="버터", 문자열 S2 ="버터";

출력 - 한 번 제거한 후 두 문자열 중 하나와 같아지는 문자열 수는 다음과 같습니다. 1

설명 - 문자열 s1과 s2가 주어지고 문자열 S, 즉 '버터'에서 얻을 것이고 이제 문자열 S에서 문자 'b'를 제거하면 문자열 s1과 동일한 '완전'이 될 것이므로 개수는 1입니다.

입력 - 문자열 S1 ="뚱뚱한", 문자열 S2 ="쥐";

출력 - 한 번 제거한 후 두 문자열 중 하나와 같아지는 문자열 수는 다음과 같습니다. 2

설명 - 문자열 s1과 s2가 주어지고 문자열 S, 즉 'frat'를 형성할 것이고 이제 문자열 S에서 문자 'rs'를 제거하면 문자열 s1과 동일한 'fat'이 될 것이고 문자를 제거하면 'f' 문자열 s2와 동일한 'rat'가 되므로 개수는 2입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 2개의 문자열 s1과 s2를 선언하고 문자열 s1의 크기를 계산하고 추가 처리를 위해 데이터를 함수에 전달합니다.
  • 변수 개수를 선언하고 가능한 최대 출력이 2이므로 2로 설정합니다.
  • 루프 탐색의 시작과 끝으로 두 개의 임시 변수를 선언합니다.
  • 0에서 문자열 s1의 크기까지 루프를 시작하고 루프 내부에서 IF s1[i]가 s2와 같지 않은지 확인한 다음 시작을 i로 설정하고 중단
  • i에서 문자열 s1의 크기가 하나 작아질 때까지 다른 루프 FOR를 시작하고 루프 내부에서 IF s1이 s2와 같지 않은지 확인한 다음 end를 i로 설정하고 중단합니다.
  • 끝의 IF 값이 시작보다 작은지 확인한 다음 개수를 26 *(문자열 s1 + 1의 크기)로 설정하고 개수를 반환합니다.
  • ELSE IF 검사 시작이 끝과 같으면 카운트를 반환합니다.
  • ELSE, 루프 FOR i에서 시작하여 끝까지 +1을 시작하고 루프 내부에서 IF s1[i]가 s2[i-1]과 같지 않음을 확인한 다음 카운트를 1만큼 감소시키고 중단합니다.
  • i부터 시작 + 1까지 루프 FOR를 시작하고 IF 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