在給定字串中插入最少字元以移除相鄰重複字元


在這個問題中,我們將計算需要插入的最小字元數,以移除所有相鄰的重複字元。

為了解決這個問題,我們需要計算相鄰重複字元對的總數。

問題陳述 – 我們給定一個名為str的字串,其中包含N個字母字元。我們需要找到需要新增到字串中的不同字元的總數,以便生成的字串不包含任何相鄰的重複字元。

示例

輸入

str = "ccddrt"

輸出

2

解釋 – 我們需要在“cc”之間插入一個字元,在“dd”之間插入一個字元。

輸入

str = ‘abcdefrt’

輸出

0

解釋 – 字串不包含任何相鄰的重複字元。因此,我們不需要在字串中插入任何字元。

輸入

str = ‘ppppppp’

輸出

6

解釋 – 字串的所有字元都相同。因此,我們需要進行字串長度 - 1 次插入。

方法一

此方法將計算字串中相鄰重複字元的總數。最終計數將是答案,因為我們需要在每個相鄰的重複字元之間插入一個新字元。

演算法

步驟1 – 用字串大小初始化str_size變數。

步驟2 – 同時,宣告並用0初始化total_steps變數,以儲存字串中的最小插入次數。

步驟3 – 使用for迴圈開始遍歷字串。

步驟4 – 如果第p個索引處的字元與第(p – 1)個索引處的字元相同,則將total_Steps增加1。

步驟5 – 最後,返回total_steps。

示例

#include <iostream>
using namespace std;

int totalInsertions(string alpha) {
    // srting lenght
    int str_size = alpha.size();
    // to store additions
    int total_steps = 0;
    // Iterate the string
    for (int p = 1; p < str_size; p++) {
        if (alpha[p] == alpha[p - 1])
            total_steps++;
    }
    // return count of additions
    return total_steps;
}
int main() {
    string str = "ccddrt";
    cout << "The total number of additions required to remove adjacent duplicates is - " << totalInsertions(str);
    return 0;
}

輸出

The total number of additions required to remove adjacent duplicates is - 2

時間複雜度 – 遍歷字串的O(N)。

空間複雜度 – O(1),因為我們不使用動態空間。

上述問題與查詢給定字串中相鄰重複字元的總數非常相似。這兩個問題都有相同的解決方案。程式設計師還可以嘗試使用while迴圈遍歷字串,並計算從給定字串中移除所有相鄰重複項所需的最小插入次數。

更新於:2023年8月25日

75 次檢視

啟動你的職業生涯

完成課程獲得認證

開始
廣告