C++ 最小插入次数以删除相邻重复的字符

C++ 最小插入次数以删除相邻重复的字符

在这个问题中,我们将计算我们需要插入的最小字符数,以删除所有相邻重复的字符。

为了解决这个问题,我们需要计算相邻重复字符对的总数。

问题陈述 - 我们已经给定了一个名为str的字符串,其中包含N个字母字符。我们需要找出我们需要添加到字符串中的不同字符的总数,这样生成的字符串不应包含任何相邻的重复字符。

示例示例

输入

str = "ccddrt"

输出

2

解释 – 我们需要在“cc”之间插入一个字符,在“dd”之间插入一个字符。

输入

str = ‘abcdefrt’

输出

0

Explanation - 该字符串中不包含任何相邻的重复字符,因此我们不需要在字符串中插入任何字符。

Input

str = ‘ppppppp’

输出结果

6

说明 – 字符串中的所有字符都相同。因此,我们需要进行字符串长度 – 1 次插入。

方法1

这种方法将计算字符串中相邻重复字符的总数。最终的总数将是答案,因为我们需要在每个相邻的重复字符之间插入一个新字符。

算法

第1步 – 用字符串的大小初始化 str_size 变量。

第2步 – 还要声明和初始化 total_steps 变量为0,以存储对字符串的最小插入次数。

第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 循环遍历字符串,计算删除给定字符串中所有相邻重复字符所需的最小插入次数。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程