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

C++에서 문자 교체 및 제거 후 균형 문자열의 최대 길이

<시간/>

(,),{,},[,] 문자만 포함하는 문자열이 제공됩니다. 목표는 인접한 문자를 바꾸거나 문자를 제거하여 균형이 되도록 그러한 문자열의 최대 길이를 찾는 것입니다. 인접한 문자를 비교하여 이를 수행합니다. 서로 반대인 경우 교체할 수 있습니다. ( }{,)(,][ 은 교체할 수 있지만 {{,)),[[,}},)),]] 는 교체할 수 없습니다 ).

또한 캐릭터에 일치하는 쌍이 없으면 제거할 수도 있습니다. ( "{{}][", 여기서 먼저 {를 제거할 수 있으며 균형 문자열 길이는 4가 됩니다. )

입력

str[]=" {{{}}{]]][()" 길이 12

출력

잔고 문자열의 최대 길이:8

설명 − str[0] 및 str[1]은 교환할 수 없음, str[0]="{{}}{]]][()" 제거 원래 str[1] 및 str[2]는 교환할 수 없음, str[ 제거 1]=“{}}{]]][()” {}는 균형을 이루고 }{ 교체 가능, 다음 2개 제거 ]], 스왑 ][ 및 ()도 균형을 맞춥니다 최종 문자열은 {}{}[]( ). 길이는 8입니다.

입력

str[]=“((((())” 길이 7

출력

str[]=“((((())” 길이 7

설명 − str[5]와 str[6]만 균형이 잡혀 있으므로 모두 제거합니다. 마지막 문자열(). 길이는 2

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

  • 문자 배열 str[]은 원래 문자열을 저장합니다. 정수 길이는 문자열의 길이를 저장합니다.

  • 함수 maxBalancedStr(char str[], int len)은 문자열과 해당 길이 매개변수를 가져와 균형 문자열의 최대 길이를 반환합니다.

  • 변수 개수는 이러한 문자열의 길이를 저장하는 데 사용되며 처음에는 0입니다.

  • 첫 번째 문자부터 문자열 순회를 시작하고 두 문자의 균형을 맞추기 위해 인접한 문자를 바꿀 수 있는지 확인합니다. 또는 이미 균형이 잡혀 있으면 count를 2만큼 늘립니다.

  • (),)( 및 {},}{ 및 [],][와 같은 쌍에 대해 이 작업을 수행하고 이러한 쌍이 있는 경우에도 i를 증가시켜 다음 문자로 이동합니다.

  • 결국 카운트는 균형 문자열의 길이를 저장합니다.

  • 결과로 카운트를 반환합니다.

예시

// 접근 방식의 C++ 구현#include using namespace std;// 길이를 반환하는 함수// 가장 긴 균형 하위 stringint maxBalancedStr(char str[20], int len) { 정수 수 =0; // 문자열 순회 for (int i =0; i  

출력

4