首頁 > 後端開發 > C++ > C++程式:重新排列給定的字串以形成一個K重複的字串

C++程式:重新排列給定的字串以形成一個K重複的字串

王林
發布: 2023-08-25 17:45:12
轉載
981 人瀏覽過

C++程式:重新排列給定的字串以形成一個K重複的字串

給定一個字串和一個整數k,我們需要對字串中的字元重新排序,使其成為k個相似子字串的串連。如果不可能,則輸出結果為「Impossible」。

string = "malaalam";
K = 2;
res = solve(s, K);
登入後複製

範例(使用地圖)

讓我們有一個字串「mottom」並且 K=2。給定的字串可以表示為 2 個子字串的串聯,如 tomtom、motmot omtomt 等。與所有 3 個子字串一樣,當 k = 2 時,兩個子字串連接在一起。

使用字串,我們可以確定每個字元出現的次數。之後,如果所有可用的頻率都能被k整除,那麼就有可能,我們可以輸出任何可能的答案。否則不可能。

上述範例的C 實作如下 -

#include <iostream>
#include <map>
using namespace std;
string solve(string s, int k) {
   map<char, int> mp;
   for (char ch : s) {
      mp[ch]++;
   }
   string repeatedSubstring = "";
   for (auto &val : mp) {
      if ((val.second % k) != 0) {
         return "Impossible";
      }
      else {
         for (int i=0;i<val.second/k;i++) {
            repeatedSubstring+=val.first;
         }
      }
}
string ans = "";
for (int i = 0; i < k; i++) {
   ans+= repeatedSubstring;
}
return ans;
}
int main() {
   string s = "mottom";
   int K = 2;
   cout << solve(s, K);
   return 0;
}
登入後複製

輸出

motmot
登入後複製
登入後複製

範例(不使用地圖)

同一範例的 C 實作(不使用映射)如下 -

#include <bits/stdc++.h>
using namespace std;

int main() {
    string str = "mottom";
    int k = 2;
    int frqncy[26] = { 0 };

    int len = str.length();

    for (int i = 0; i < len; i++) {
        frqncy[str[i] - 'a']++;
    }
    string single_copy = "";
    for (int i = 0; i < 26; i++) {
        if (frqncy[i] != 0) {

            if ((frqncy[i] % k) != 0) {

                string ans = "Not Possible";
                cout << ans;
            } else {

                int total_occurrences = (frqncy[i] / k);

                for (int j = 0; j < total_occurrences; j++) {
                    single_copy += char(i + 97);
                }
            }
        }
    }
    string kString;
    for (int i = 0; i < k; i++) {
        kString += single_copy;
    }
    cout << kString;
    return 0;
}
登入後複製

輸出

motmot
登入後複製
登入後複製

結論

我們可以使用映射或 unordered_map 將字元哈希到頻率。我們可以使用 [26] 數組來表示拉丁小寫字符,並將所有頻率設為 0。這是一個基於實作的問題,時間複雜度為 O(n),使用 unordered_map 或 hashmap。

以上是C++程式:重新排列給定的字串以形成一個K重複的字串的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板