> 백엔드 개발 > C++ > 본문

C++에서 문자를 재정렬하여 회문(가능한 경우)을 형성합니다.

王林
풀어 주다: 2023-09-09 15:57:09
앞으로
955명이 탐색했습니다.

C++에서 문자를 재정렬하여 회문(가능한 경우)을 형성합니다.

주어진 길이의 문자열 'str'이 제공됩니다. 임무는 주어진 입력 문자열에서 문자를 추가하거나 제거하지 않고 출력이 회문 문자열이 되도록 문자를 재배열하는 것입니다. 회문 문자열은 문자가 처음부터 끝까지 동일하게 들리도록 배열된 문자열입니다.

이를 위한 다양한 입력 및 출력 시나리오를 살펴보겠습니다. -

Input - String str = "itnin"

Output - 가능하다면 회문 문자열을 형성하기 위해 문자를 재배열하는 방법은 다음과 같습니다: nitin

설명 - 문자열 유형의 변수가 주어졌습니다. str이라고 가정해 보겠습니다. 이제 입력 문자열의 문자를 재정렬하여 회문 문자열이 아닌 경우 이를 회문 문자열로 만듭니다

가능한 경우 'NOT POSSIBLE'을 반환합니다. 따라서 입력 문자열에 대한 출력은 'nitin'입니다.

Input - String str = "baaaba"

Output - 회문을 형성하기 위해 가능한 문자 재배열의 결과는 다음과 같습니다. aabbaa

Explanation - 문자열 유형의 변수가 주어집니다. str이라고 가정해 보겠습니다. 이제 입력 문자열의 문자를 다시 배열하여 회문 문자열로 만들고 이것이 가능하지 않으면 'NOT POSSIBLE'을 반환합니다. 따라서 입력 문자열에 대한 출력은 'aabbaa'입니다.

아래 프로그램에서 사용한 방법은 다음과 같습니다

  • 문자열형 변수를 str이라고 가정하고 입력하고, 문자열의 크기를 계산하여 length라는 변수에 저장합니다.

  • 데이터를 재정렬(str, length) 함수에 전달합니다.

  • Rearrangement(arr, length)

    • 함수 내에서 char 및 정수 유형의 키-값 쌍을 저장하는 'um'이라는 unordered_map 유형 변수를 만듭니다.

    • 정수형 변수 total을 선언하고 0으로 설정합니다.

    • 문자형 변수 'ch'와 문자열형 변수 str_1, str_2를 생성합니다.

    • i가 길이보다 작아질 때까지 i에서 0까지의 루프로 시작합니다. 루프 내에서 값을 1씩 증가시켜 um[str[i]]를 설정합니다.

    • FOR 반복을 시작하여 맵 'um'을 반복합니다. 루프 내에서 it.second % 2가 0이 아닌지 확인한 다음 합계를 1만큼 늘리고 ch를 it.first로 설정합니다.

    • IF total이 1보다 크거나 total = 1이고 길이 % 2 = 0인지 확인하면 0이 반환됩니다.

    • FOR 반복을 시작하여 맵 'um'을 반복합니다. 루프 내에서 str(it.second / 2, it.first)는 str로 설정되고, str_1은 str_1 + str로 설정되며, str_2는 str + str_2로 설정됩니다.

    • IF total = 1인지 확인한 다음 str_1 + ch + str_2를 반환합니다. 그렇지 않으면 str_1 + str_2가 반환됩니다.

  • 결과를 인쇄하세요.

Example

#include <bits/stdc++.h>
using namespace std;
string Rearrangement(string str, int length){
   unordered_map<char, int> um;
   int total = 0;
   char ch;
   string str_1 = "";
   string str_2 = "";

   for (int i = 0; i < length; i++){
      um[str[i]]++;
   }
   for(auto it : um){
      if(it.second % 2 != 0){
         total++;
         ch = it.first;
      }
   }
   if(total > 1 || total == 1 && length % 2 == 0){
      return 0;
   }
   for(auto it : um){
      string str(it.second / 2, it.first);
      str_1 = str_1 + str;
      str_2 = str + str_2;
   }
   if(total == 1){
      return str_1 + ch + str_2;
   }
   else{
      return str_1 + str_2;
   }
}
int main(){
   string str = "itnin";
   int length = str.size();
   cout<<"Rearrangement of characters to form palindrome if possible is: "<<Rearrangement(str, length);
   return 0;
}
로그인 후 복사

Output

위 코드를 실행하면 다음과 같은 출력이 생성됩니다

Rearrangement of characters to form palindrome if possible is: nitin
로그인 후 복사

위 내용은 C++에서 문자를 재정렬하여 회문(가능한 경우)을 형성합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿