重新排列字串中的字符,使得任意兩個相鄰字符不相同,使用C++實現
我們給定了一個字串,假設為str,長度可以是任意值。任務是重新排列給定的字串,使得在結果字串中不會有相同的相鄰字元排在一起。
讓我們來看看各種輸入輸出場景:
輸入 − 字串str = "itinn"
輸出 − 重新排列字串中的字符,使得相鄰的兩個字符不相同,結果為:initn。
解釋 − 我們給定了一個字串類型的變量,假設為str。現在我們將重新排列輸入字串的字符,使得沒有兩個相同的字符出現在同一個位置,即將'nn'移動到不相鄰的位置。所以最終的結果是 字串將會是'initn'.
輸入 − 字串str = "abbaabbaa"
輸出 − 字串中字元重新排列,使得相鄰的字元不相同: ababababa
解釋 − 我們給定了一個字串類型的變量,假設為str。現在我們將重新排列輸入字串的字符,使得沒有兩個相同的字符出現在同一個位置,即移動'bb', 'aa', 'bb', 'aa',因為它們是相同的並且相鄰。所以最終的字串將會是 ‘ababababa’。
下面程式中使用的方法如下
輸入字串類型的變量,假設為str,併計算字串的大小並將其儲存在一個名為length 的變數中。
檢查如果 length 為 0,則回傳。
將資料傳遞給函數 Rearrangement(str, length)。
-
在函數 Rearrangement(arr, length) 內部
設定字串的大小為 (length 1)/2。
宣告一個向量類型的變數 vec(26, 0),它將儲存整數類型的數據,以及字串類型的指標 ptr(length, ‘ ‘)。也宣告一個臨時變數 temp,類型為整數,值為 0。
開始迴圈 FOR 來迭代 str。在循環內部,設定 vec[it - ‘a’] 。
建立一個字元類型的變數 ch,並將其設定為呼叫 maximum(vec) 函數的結果。
宣告一個整數型別的變數 total,並將其設為 vec[ch - ‘a’]。
檢查如果 total 大於 size,則回傳。
開始循環 WHILE total,然後將 ptr[temp] 設為 ch,將 temp 設定為 temp 2,並將 total 減 1。
將 vec[ch - 'a'] 設為 0。開始循環 FOR,從 i 到 0,直到 i 小於 26。在循環內部,開始while 循環,當vec[i] 大於0 時,將temp 設為(temp >= length) ? 1 : temp,將ptr[temp] 設定為'a' i,將temp 設定為temp 2,並將vec[i] 減1。
返回ptr
-
#在函數char maximum(const vector
& vec) 內部 宣告一個整數類型的變數high,並將其設為0,以及一個字元類型的變數c。
開始迴圈 FOR,從 i 到 0,直到 i 小於 26。在循環內部,檢查如果 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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

在本文中,我們將討論如何透過在各自索引處按字母順序重新排列元音來修改C++中的給定字串。我們還將解釋用於解決此問題的方法,並提供帶有測試案例的範例。問題陳述給定一個字串,按字母順序在各自的索引處重新排列元音。字串中的子音應保持其原始順序。例如,給定字串“tutorialspoint”,輸出應為“tatiriolspount”。方法這個問題可以用簡單的演算法來解決。我們可以先建立一個單獨的字串,其中按各自的順序包含給定字串中的所有元音。然後我們可以按字母順序對該字串進行排序。最後,

我們已經給定了兩個字串,需要檢查給定字串的排列是否存在,以便一個排列可以比第i個索引處的另一個排列具有更大的字元。我們可以透過對字串進行排序,並逐一比較字串中的每個字元來解決問題。另外,我們可以利用兩個字串的字元頻率來解決問題。問題陳述-我們給了長度為N的字串str1和str2。我們需要檢查是否存在任何字串的排列,使得其中一個字串的排列在字典序上大於另一個字串。這意味著任何排列都應該在第i個索引處具有比另一個字串排列的第i個索引字元更大的字元。範例輸入-str1="

在各種解決問題的場景中操作字串至關重要。發現給定字串的排列可以優化大於相鄰字元的字元數,這是一個有趣的難題,需要重新排列字串的字元以產生盡可能多的相鄰字元對,其中左側字元小於右側字元。方法有多種方法可以解決字串的排列,其中最大字元數大於與其直接相鄰的字元數。方法1−回溯法與剪枝−方法2-動態規劃-方法3-堆演算法-方法4-帶修剪的字典順序-方法一:回溯法與剪枝使用回溯演算法產生字串的所有排列。在每一步中,檢查當前排列是否有比其相鄰字元更多的字元大於迄今為止找到的最大值。如果沒有,請儘早修剪

我們給定了一個字串,假設為str,長度可以是任意值。任務是重新排列給定的字串,使得在結果字串中不會有相同的相鄰字元排在一起。讓我們看看各種輸入輸出場景:輸入 −字串str="itinn"輸出 −重新排列字串中的字符,使得相鄰的兩個字符不相同,結果為:initn。解釋 −我們給定了一個字串類型的變量,假設為str。現在我們將重新排列輸入字串的字符,使得

我們被給定一個長度為任意給定長度的字串'str'。任務是重新排列字符,使輸出成為一個回文字串,而不添加或刪除給定輸入字串中的字符。回文字串是指字元以一種方式排列,使得它們從開始到結束發音相同。讓我們看看這個的各種輸入輸出場景-輸入 -字串str="itnin"輸出 -如果可能,字元的重新排列形成回文字串是:nitin解釋 -我們被給定一個字串類型的變量,假設為str。現在我們將重新排列輸入字串的字符,使其成

我們有一個正整數型別的數組,假設是arr[],大小任意。任務是重新排列數組,使得當我們將一個元素與其相鄰元素相乘,然後將所有結果元素相加時,會傳回最小的和。讓我們來看看不同的輸入輸出情況:輸入 -intarr[]={2,5,1,7,5,0,1,0}輸出 -重新排列數組以最小化和,即連續一對元素的乘積為:70505121解釋 -我們有一個大小為8的整數陣列。現在,我們將重新排列數組,即70505121。我們將檢查是否回傳最小和,即7*0+5*0+5

在這個問題中,我們將對數組元素執行給定的查詢。查詢包含陣列元素的循環左旋轉、右旋轉和更新。解決問題的邏輯部分是數組旋轉。向左旋轉數組的簡單方法是將每個元素替換為下一個元素,將最後一個元素替換為第一個元素。我們可以使用deque資料結構來有效率地旋轉數組。問題陳述-我們給了一個包含整數值的arr[]陣列。此外,我們也給了一個包含K個查詢的requests[]陣列。我們需要根據以下規則對arr[]陣列元素執行requests[]中給出的每個查詢。 {0}-對數組進行圓形左旋轉。 {1)-對數組進行圓形

如何將win10系統開始功能表中的程式重新排列?很多小夥伴可能不太了解,如果你不知道如何重新排列,下面小編整理了win10系統重新排列開始選單中的程式的設定方法,感興趣的話。跟著小編一起往下看看吧! ! win10系統重新排列開始選單中的程式的設定方法1、把系統更新到win1010156版才可以使用這個功能; 2、點擊開始選單圖標,然後再點【所有應用】; 3、進入開始選單中的所有程序中,然後點擊頂部的【&】圖標,這樣就可以進入設定排序順序的地方; 4、選擇你以哪個首字母或
