문자열이 주어지며 그것이 str이라고 가정하면 길이는 어떤 값이라도 될 수 있습니다. 임무는 동일한 인접 문자가 결과 문자열에서 함께 정렬되지 않도록 주어진 문자열을 재배열하는 것입니다.
Input − String str = "itinn"
Output − 인접한 두 문자가 동일하지 않도록 문자열의 문자를 다시 정렬하면 결과는 다음과 같습니다. initn.
설명 − str이라는 가정 하에 문자열 유형의 변수가 제공됩니다. 이제 두 개의 동일한 문자가 동일한 위치에 나타나지 않도록 입력 문자열의 문자를 재배열하겠습니다. 즉, 'nn'을 인접하지 않은 위치로 이동합니다. 그래서 최종 결과는 문자열은 'initn'이 됩니다.
Input − String str = "abbaabbaa"
Output − 문자열의 문자는 인접한 문자가 다르도록 재배열됩니다. ababababa
Explanation − 다음과 같습니다. 문자열 유형의 변수(str로 가정). 이제 입력 문자열의 문자를 재배열하여 두 개의 동일한 문자가 동일한 위치에 나타나지 않도록 합니다. 즉, 'bb', 'aa', 'bb', 'aa'는 동일하고 인접하므로 이동합니다. 따라서 최종 문자열은 'ababababa'가 됩니다.
문자열형 변수를 str이라고 가정하고 입력하고, 문자열의 크기를 계산하여 length라는 변수에 저장합니다.
길이가 0인지 확인한 후 반환합니다.
데이터를 재정렬(str, length) 함수에 전달합니다.
함수 안에서 Rearrangement(arr, length)
문자열의 크기를 (length + 1)/2로 설정합니다.
정수형 데이터를 저장할 벡터형 변수 vec(26, 0)과 문자열형 포인터 ptr(length, ' ')를 선언합니다. 또한 정수 유형과 값 0의 임시 변수 temp를 선언합니다.
FOR 반복을 시작하여 str을 반복합니다. 루프 내부에서 vec[it - 'a']++를 설정합니다.
문자형 변수 ch를 생성하고 maximum(vec) 함수 호출 결과로 설정합니다.
정수 유형의 변수 total을 선언하고 vec[ch - 'a']로 설정합니다.
합계가 크기보다 큰지 확인한 후 반환하세요.
WHILE total 반복을 시작한 다음 ptr[temp]를 ch로 설정하고 temp를 temp + 2로 설정한 다음 총계를 1씩 감소시킵니다.
vec[ch - 'a']를 0으로 설정합니다. i가 26보다 작을 때까지 i에서 0까지 FOR 반복을 시작합니다. 루프 내에서 while 루프를 시작하고, vec[i]가 0보다 크면 temp를 (temp >= length) ? 1로 설정하고, ptr[temp]를 'a' + i로 설정하고, temp를 temp로 설정합니다. + 2, vec[i]를 1씩 감소시킵니다.
Return ptr
함수 내부 char maximum(const vector
정수형 변수를 high로 선언하고 0으로 설정하고, 문자형 변수 c를 지정합니다.
i가 26보다 작을 때까지 i에서 0까지 FOR 반복을 시작합니다. 루프 내에서 vec[i]가 high보다 작은지 확인한 다음 high를 vec[i]로 설정하고 c를 'a' + i로 설정합니다.
c
로 돌아가서 결과를 인쇄하세요.
#include <bits/stdc++.h> using namespace std; char maximum(const vector<int>& vec){ int high = 0; char c; for(int i = 0; i < 26; i++){ if(vec[i] > high){ high = vec[i]; c = 'a' + i; } } return c; } string Rearrangement(string str, int length){ int size = (length + 1) / 2; vector<int> vec(26, 0); string ptr(length, ' '); int temp = 0; for(auto it : str){ vec[it - 'a']++; } char ch = maximum(vec); int total = vec[ch - 'a']; if(total > size){ return ""; } while(total){ ptr[temp] = ch; temp = temp + 2; total--; } vec[ch - 'a'] = 0; for(int i = 0; i < 26; i++){ while (vec[i] > 0){ temp = (temp >= length) ? 1 : temp; ptr[temp] = 'a' + i; temp = temp + 2; vec[i]--; } } return ptr; } int main(){ string str = "itinn"; int length = str.length(); if(length == 0){ cout<<"Please enter a valid string"; } string count = Rearrangement(str, length); if(count == ""){ cout<<"Please enter a valid string"; } else{ cout<<"Rearrangement of characters in a string such that no two adjacent are same is: "<<count; } return 0; }
위 코드를 실행하면 다음과 같은 출력이 생성됩니다
Rearrangement of characters in a string such that no two adjacent are same is: initn
위 내용은 인접한 두 문자가 서로 다르도록 문자열의 문자를 재배열합니다(C++로 구현됨).의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!