


Rearrange the characters in a string so that any two adjacent characters are different, implemented in C++
We are given a string, assuming it is str, the length can be any value. The task is to rearrange the given string so that identical adjacent characters do not line up together in the resulting string.
Let us look at various input and output scenarios:
Input − String str = "itinn"
Output − Rearrange the characters in the string so that two adjacent characters are different. The result is: initn.
Explanation − We are given a variable of string type, assuming it is str. Now we will rearrange the characters of the input string so that no two identical characters appear in the same position, i.e. move 'nn' to a non-adjacent position. So the final result is The string will be 'initn'.
Input − String str = "abbaabbaa"
Output − Rearrange the characters in the string , making adjacent characters different: ababababa
Explanation − We are given a variable of string type, assuming it is str. Now we will rearrange the characters of the input string so that no two same characters appear in the same position i.e. move 'bb', 'aa', 'bb', 'aa' since they are the same and adjacent . So the final string will be ‘ababababa’.
The method used in the following program is as follows
Input a string type variable, assuming it is str, and calculate the size of the string and store it in a name is the length variable.
Check if length is 0, then return.
Pass the data to the function Rearrangement(str, length).
-
Inside function Rearrangement(arr, length)
Set the size of the string to (length 1)/2.
Declare a vector type variable vec(26, 0), which will store integer type data, and a string type pointer ptr(length, ‘ ‘). Also declare a temporary variable temp, of type integer and value 0.
Start looping FOR to iterate str. Inside the loop, set vec[it - ‘a’] .
Create a character type variable ch and set it to the result of calling the maximum(vec) function.
Declare an integer type variable total and set it to vec[ch - ‘a’].
Check if total is greater than size, then return.
Start looping WHILE total, then set ptr[temp] to ch, temp to temp 2, and decrement total by 1.
Set vec[ch - 'a'] to 0. Start looping FOR from i to 0 until i is less than 26. Inside the loop, start the while loop, when vec[i] is greater than 0, set temp to (temp >= length) ? 1: temp, set ptr[temp] to 'a' i, set temp to temp 2, and decrement vec[i] by 1.
Return ptr
-
Inside the function char maximum(const vector
& vec) Declare an integer type variable high and set it to 0, and a character type variable c.
Start looping FOR from i to 0 until i is less than 26. Inside the loop, check if vec[i] is less than high, then set high to vec[i] and c to 'a' i.
Return c
Print result.
Example
#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; }
Output
If we run the above code, the following output will be generated
Rearrangement of characters in a string such that no two adjacent are same is: initn
The above is the detailed content of Rearrange the characters in a string so that any two adjacent characters are different, implemented in C++. For more information, please follow other related articles on the PHP Chinese website!

There are four commonly used XML libraries in C: TinyXML-2, PugiXML, Xerces-C, and RapidXML. 1.TinyXML-2 is suitable for environments with limited resources, lightweight but limited functions. 2. PugiXML is fast and supports XPath query, suitable for complex XML structures. 3.Xerces-C is powerful, supports DOM and SAX resolution, and is suitable for complex processing. 4. RapidXML focuses on performance and parses extremely fast, but does not support XPath queries.

C interacts with XML through third-party libraries (such as TinyXML, Pugixml, Xerces-C). 1) Use the library to parse XML files and convert them into C-processable data structures. 2) When generating XML, convert the C data structure to XML format. 3) In practical applications, XML is often used for configuration files and data exchange to improve development efficiency.

The main differences between C# and C are syntax, performance and application scenarios. 1) The C# syntax is more concise, supports garbage collection, and is suitable for .NET framework development. 2) C has higher performance and requires manual memory management, which is often used in system programming and game development.

The history and evolution of C# and C are unique, and the future prospects are also different. 1.C was invented by BjarneStroustrup in 1983 to introduce object-oriented programming into the C language. Its evolution process includes multiple standardizations, such as C 11 introducing auto keywords and lambda expressions, C 20 introducing concepts and coroutines, and will focus on performance and system-level programming in the future. 2.C# was released by Microsoft in 2000. Combining the advantages of C and Java, its evolution focuses on simplicity and productivity. For example, C#2.0 introduced generics and C#5.0 introduced asynchronous programming, which will focus on developers' productivity and cloud computing in the future.

There are significant differences in the learning curves of C# and C and developer experience. 1) The learning curve of C# is relatively flat and is suitable for rapid development and enterprise-level applications. 2) The learning curve of C is steep and is suitable for high-performance and low-level control scenarios.

There are significant differences in how C# and C implement and features in object-oriented programming (OOP). 1) The class definition and syntax of C# are more concise and support advanced features such as LINQ. 2) C provides finer granular control, suitable for system programming and high performance needs. Both have their own advantages, and the choice should be based on the specific application scenario.

Converting from XML to C and performing data operations can be achieved through the following steps: 1) parsing XML files using tinyxml2 library, 2) mapping data into C's data structure, 3) using C standard library such as std::vector for data operations. Through these steps, data converted from XML can be processed and manipulated efficiently.

C# uses automatic garbage collection mechanism, while C uses manual memory management. 1. C#'s garbage collector automatically manages memory to reduce the risk of memory leakage, but may lead to performance degradation. 2.C provides flexible memory control, suitable for applications that require fine management, but should be handled with caution to avoid memory leakage.


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Atom editor mac version download
The most popular open source editor

SublimeText3 English version
Recommended: Win version, supports code prompts!

mPDF
mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

DVWA
Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

MinGW - Minimalist GNU for Windows
This project is in the process of being migrated to osdn.net/projects/mingw, you can continue to follow us there. MinGW: A native Windows port of the GNU Compiler Collection (GCC), freely distributable import libraries and header files for building native Windows applications; includes extensions to the MSVC runtime to support C99 functionality. All MinGW software can run on 64-bit Windows platforms.