


Checks whether a string can form a palindrome string by swapping character pairs at indices with unequal characters in a binary string
Problem Statement
We have a string str and a binary string B. The length of both strings is equal to N. We need to check if we can make string str a palindrome string by swapping its characters multiple times on any pair of indexes containing unequal characters in string B.
ExampleExample
enter
str = ‘AAS’ B = ‘101’
Output
‘YES’
Explanation
is:Explanation
We can exchange str[1] and str[2] because B[1] and B[2] are not equal. The final string can be 'ASA'.
enter
str = ‘AASS’ B = ‘1111’
Output
‘No’
Explanation
is:Explanation
We cannot make the string palindrome because string B does not contain unequal characters.
enter
str = ‘AASSBV’ B = ‘111100’
Output
‘No’
Explanation
is:Explanation
We cannot make the string str a palindrome due to character frequency mismatch.
method one
In the first method, we will check if any palindrome string can be created using all the characters of the string str. If so, we can check if we can swap the characters in the index pairs containing unequal characters in string B and make the string a palindrome. Otherwise, we return false.
algorithm
Step 1 - Execute the utility() function and exchange characters according to the given conditions to determine whether the string can become a palindrome by exchanging characters.
Step 2 - Define canBePalindromic() function to check if we can construct any palindrome string using the characters of str.
Step 2.1 − Create a map that stores each character in the string str and its frequency. Use a for loop to iterate through the string and count the frequency of characters.
Step 2.2 - Count the number of characters with even and odd frequencies.
Step 2.3 - Use set to get the total number of unique characters in a string.
Step 2.4 − Returns true if the string length is odd and contains only one character with odd frequency.
Step 2.5 − If the string length is even, then all characters with even frequency, and 0 characters with odd frequency, return true.
Step 2.6 − Return false.
Step 3 - If the string cannot become a palindrome, return false.
Step 4 - If string B contains multiple '1's and '0's, return true; otherwise, return false.
Example
#include <bits/stdc++.h> using namespace std; // function to check if the string can be palindromic bool canBePalindromic(string str){ //Creating the map to store the frequency of each character map<char, int> charMap; // store the frequency of each character of string Str for (int i = 0; i < str.length(); i++) { charMap[str[i]] += 1; } // to store the count of even and odd frequent characters int even = 0, odd = 0; // iterate through the map for (auto e : charMap) { //If frequency is odd, increment odd count; else, increment even count if (e.second % 2 == 1) { odd++; } else { even++; } } // set to store unique characters of string Str unordered_set<char> set; //Insert all characters of string Str in set for (int i = 0; i < str.size(); i++){ set.insert(str[i]); } // if the string length is odd and only one character has an odd frequency, return true if (str.size() % 2 == 1 && even == set.size() - 1 && odd == 1){ return true; } // If the string length is even and all characters have even frequency, return true if (str.size() % 2 == 0 && even == set.size() && odd == 0){ return true; } // else return false return false; } // function to check if the string can be palindromic by swapping characters according to string B bool utility(string S, string B){ // If string S cannot be palindromic, return false. if (canBePalindromic(S) == false){ return false; } else{ // if at least one '1' and '0' is present in string B, string S can be palindromic int one = 0, zero = 0; for (int i = 0; i < B.size(); i++) { // If the current character is '0.' if (B[i] == '0'){ zero++; } else { one++; } } // return true if at least one '1' and '0' is present in the string B if (one >= 1 && zero >= 1){ return true; } else { return false; } } } int main(){ string S = "NANA"; string B = "0001"; bool result = utility(S, B); if (result) cout << "Yes"; else cout << "No"; return 0; }
Output
Yes
Time complexity - O(NlogN), because we use a for loop to traverse the string, and the insert() method of set takes (logN) time.
Space Complexity - O(K), where K is the total number of unique characters.
Method Two
In this method, we will use an array to store the frequency of characters instead of using a map.
algorithm
Step 1 - Create a 'charFrequancy' array of length 26 and initialize it to zero.
Step 2 - Count the total number of 1's and 0's in string B.
Step 3 - Update the frequency of each character in the array.
Step 4 - If the string length is even and the odd frequency is not zero, return false.
Step 5 - If the string length is odd and the odd frequency is greater than 1, return false.
Step 6 - Returns true if both 1 and 0 exist in the string.
Step 7 - Return false.
Example
#include <bits/stdc++.h> using namespace std; // function to check if the given string can be converted to a palindrome bool utility(string str, string B){ // array to store character counts in str int charFrequancy[26] = {0}; int ones = 0, zeros = 0, odd_fre = 0; // count ones and zeros for (char ch : B) { if (ch == '1') ones++; if (ch == '0') zeros++; } // store counts of characters for (char ch : str){ charFrequancy[ch - 'A']++; } // check total character with odd frequency for (int i = 0; i < 26; i++){ if (charFrequancy[i] % 2 == 1) odd_fre++; } if (str.length() % 2 == 0 && odd_fre != 0) return false; if (str.length() % 2 == 1 && odd_fre > 1) return false; if (ones > 0 && zeros > 0) return true; return false; } int main(){ string S = "NBCNB"; string B = "01010"; if (utility(S, B)){ cout << "Yes"; } else { cout << "No"; } return 0; }
Output
Yes
Time complexity - O(N) because we use a for loop to iterate over the string.
Space Complexity − O(1) since we always use an array of length 26.
in conclusion
We learned two methods to check if a string can become a palindrome by swapping characters based on a given condition. The first method uses collections and maps, while the second method only uses arrays to store data. The second method is better than the first method because the insert() method takes O(logn) time to insert data into the collection, while the array only takes O(1) time.
The above is the detailed content of Checks whether a string can form a palindrome string by swapping character pairs at indices with unequal characters in a binary string. For more information, please follow other related articles on the PHP Chinese website!

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

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



Swap space plays an important role in Linux systems, especially when the system is low on memory. It acts as a backup memory storage space that helps the system run smoothly and maintain stability even under high load. This article provides you with a detailed guide to adding swap space on Ubuntu 22.04LTS to ensure that your system performance is optimized and can handle various workloads. Understanding Swap Space Swap space provides virtual memory that is used to supplement the system's physical RAM. When the system is low on RAM, the kernel swaps data to disk to prevent out-of-memory and system crashes. Linux systems commonly use swap space to handle this situation. Run multiple memory-intensive applications simultaneously to process very large files or data

A matrix is a two-dimensional array of numbers arranged in rows and columns. Python does not have any data type to represent matrices, but we can use nested lists or NumPy arrays as matrices. See the following input and output scenarios to see how to swap the first and last column elements of a matrix. Input-Output Scenario Suppose we have a 3X3 matrix represented using a list of lists. The output matrix will be the resulting matrix of swapping the first and last column elements. Inputmatrix:[1,3,4][4,5,6][7,8,3]Outputmatrix:[4,3,1][4,5,6][3,8,7]Let us consider another A matrix whose rows and columns are unequal. Inputmatrix:

In this problem, we need to find the longest non-increasing subsequence of a given string. Non-increasing means that the characters are either the same or in descending order. Since binary strings only contain "0" and "1", the resulting string should either start with "1" and end with "0", or start and end with "0" or "1". To solve this problem, we will count the prefix "1" and suffix "0" at each position of the string and find the maximum sum of prefix "1" and suffix "0". Problem Statement - We are given a binary string str. We need to find the longest non-increasing subsequence from the given string. Example Input–str="010100"Output–4 illustrates the longest non-recursive

In the given problem, we are given a string consisting of 0 and 1; we need to find the total number of all permutations starting with 1. Since the answer may be a huge number, we take it modulo 1000000007 and output it. Input:str="10101001001"Output:210Input:str="101110011"Output:56 We will solve this problem by applying some combinatorial mathematics and setting up some formulas. Solution Method In this method we will count the number of 0's and 1's. Now suppose n is the number of 1's that appear in our string and m is the number of 0's that appear in our string

The pack() function packs data into a binary string. Syntax pack(format,args) Parameters format - the format to use. The following are possible values - a - NUL padded string A - space padded string h - hexadecimal string, low nibble first H - hexadecimal string, high nibble first c - signed char C - unsigned char s - signed short (always 16 bits, machine byte order) S - unsigned short (always 16 bits, machine byte order) n - unsigned short (always 16 bits, big endian byte order) v - unsigned short (always 16 bits, little endian byte order) i - signed integer (depends on machine size and byte order) I - None signed integer (depending on

Suppose we have an nxn matrix. Each element in the matrix is unique and an integer between 1 and n2. Now we can perform the following operations in any number and in any order. We choose any two integers x and y in the matrix, where (1≤x

Problem Statement We have a string str and a binary string B. The length of both strings is equal to N. We need to check if we can make string str a palindrome string by swapping its characters multiple times on any pair of indexes containing unequal characters in string B. Example Example Input str=‘AAS’ B=‘101’ Output ‘YES’ The Chinese translation of Explanation is: Explanation We can exchange str[1] and str[2] because B[1] and B[2] are not equal. The final string can be 'ASA'. Input str=‘AASS’ B=‘1111’ and output ‘No’. The Chinese translation of Explanation is: Explanation that we cannot make the string palindrome,

The purpose of this article is to implement a program that counts the number of binary strings of length N formed by repeated concatenation of a substring. The goal is to determine how many binary strings of length N can be created by repeatedly concatenating individual substrings of the given text, where N is a positive integer. Problem Statement Implement a program that counts the number of binary strings of length N that repeatedly concatenate substrings. Example Example 1 Letus take the Input, N = 3 Output: 2 The Chinese translation of Explanation is: Explanation The following lists feasible binary strings of length N = 3, in which a substring is repeatedly concatenated. "000":Thesubstr
