在C++中重新排列字串以最大化迴文子串的數量
給定任意長度的字串“str”。任務是重新排列字元,使其包含儘可能多的迴文子串,無需新增或刪除任何字元。迴文串是指字元排列後從頭到尾讀音相同的字串。
讓我們看看各種輸入輸出場景:
輸入 - 字串 str = "itnin"
輸出 - 重新排列字串以最大化迴文子串數量的結果是:iinnt。
解釋 - 給定一個字串變數str。我們將重新排列輸入字串的字元,使其成為最大回文串,如果不可能,則返回“不可能”。因此,給定輸入字串的輸出是“iinnt”。
輸入 - 字串 str = "abaaaabb"
輸出 - 重新排列字串以最大化迴文子串數量的結果是:aaaaabbb。
解釋 - 給定一個字串變數str。我們將重新排列輸入字串的字元,使其成為最大回文串,如果不可能,則返回“不可能”。因此,給定輸入字串的輸出是“aaaaabbb”。
下面程式中使用的方法如下:
輸入一個字串型別的變數,例如str,計算字串的大小並將其儲存在一個名為length的變數中。
將資料傳遞給函式Rearr_string(str, length)。
在函式Rearr_string(str, length)內部:
宣告一個大小為26的整型陣列,例如arr[26],並將其初始化為0。
宣告一個名為temp的字串型別臨時變數。
啟動FOR迴圈,從i=0到i小於length。在迴圈內,設定arr[str[i] - 'a']++。
啟動FOR迴圈,從i=0到i小於26。在迴圈內,啟動另一個FOR迴圈,從j=0到j小於arr[i]。在迴圈內,設定temp = temp + (char)(97 + i)。
返回temp。
列印結果。
示例
#include <bits/stdc++.h>
using namespace std;
string Rearr_string(string str, int length){
int arr[26] = { 0 };
string temp = "";
for(int i = 0; i < length; i++){
arr[str[i] - 'a']++;
}
for(int i = 0; i < 26; i++){
for(int j = 0; j < arr[i]; j++){
temp = temp + (char)(97 + i);
}
}
return temp;
}
int main(){
string str = "itinn";
int length = str.length();
cout<<"Rearrangement of the string to maximize the number of palindromic substrings is: "<<Rearr_string(str, length);
return 0;
}輸出
如果執行以上程式碼,將生成以下輸出:
Rearrangement of the string to maximize the number of palindromic substrings is: iinnt
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP