C++ 在给定字符串中的特定位置添加空格后生成字符串

C++ 在给定字符串中的特定位置添加空格后生成字符串

在这个问题中,我们需要在字符串的给定索引之前添加空格。我们可以使用两种不同的方法来解决这个问题。第一种方法是将给定字符串的字符移动到特定索引处添加空格,第二种方法是用空格替换预初始化字符串的字符。

问题陈述 − 我们有一个长度为N的字符串str,其中包含字母数字字符。同时,我们还有一个包含M个正整数的spaceList数组,表示字符串索引。我们需要在数组中存在的每个索引之前给字符串添加空格。然后,我们需要打印更新后的字符串。

示例

输入

str = "welcometotutorialspoint", spaceList = {7, 9}

输出

‘welcome to tutorialspoint’

解释 − 在这里,我们考虑的是从0开始的索引。我们在输入字符串中的第7个和第9个索引之前添加了空格。

输入

str = “abc”, spaceList = {1, 2}

输出

‘a b c

说明 - 我们在索引1和2之前添加了空格。

输入

str = "IloveCProgramming", spaceList = {1, 5, 6}

输出

I love C Programming

解释 − 我们通过在给定索引处添加空格来分隔字符串。

方法1

在这种方法中,我们将从数组中取出一个特定的索引。然后,在字符串末尾添加空格,并将所有字符向右移动1个位置,从当前索引开始到字符串末尾。

步骤

步骤1 − 使用字符串的大小初始化变量size。

步骤2 − 使用循环遍历字符串。

步骤3 − 从spaceList数组中获取索引。

步骤4 − 在给定字符串的末尾添加空格。

步骤5 − 将所有str[i+1]字符替换为str[i]。这里的‘I’从‘strLen’开始,直到它等于索引-1为止。

步骤6 − 将空格赋值给str[index-1]。

步骤7 − 最后,返回更新后的字符串str。

示例

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

string AddSpaces(string str, vector<int> &spaceList) {
    // get the size of the list
    int size = spaceList.size();
    // traverse the space list
    while (size--) {
        // get index to add space
        int index = spaceList[size] + 1;
        int strLen = str.size() - 1;
        // append space at the end
        str += ' ';
        // Move space
        for (int i = strLen; i >= index - 1; i--) {
            str[i + 1] = str[i];
        }
        str[index - 1] = ' ';
    }
    return str;
}
int main() {
    string str = "welcometotutorialspoint";
    vector<int> spaceList = {7, 9};
    cout << "The updated string is : " << AddSpaces(str, spaceList) << endl;
    return 0;
}

输出

The updated string is : welcome to tutorialspoint

时间复杂度 − O(N*K),其中 K 是列表的大小,N 是字符串的大小。

空间复杂度 − O(1),因为我们修改的是同一个字符串。

方法2

在这个方法中,我们初始化包含总空格数等于字符串长度加列表长度的字符串。之后,我们通过将其替换为输入字符串的字符来更新字符串,并在需要添加空格时保持不变。

步骤

步骤1 − 使用空字符串初始化 ‘finalStr’ 字符串。同时,字符串的长度应该等于 str_size 和 list_size。这里,str_size 是字符串的大小,list_size 是列表的大小。

步骤2 − 遍历 finalStr 字符串。

步骤3 − 如果 l_index 小于列表大小,并且 p 等于 spaceList[l_index] + l_index,则增加 l_index 1,因为我们需要在该位置添加空格。

步骤4 − 否则,将 str[index] 赋值给 finalStr[p],并增加 index 的值 1。

步骤5 − 返回 ‘finalStr’ 字符串。

示例

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

string AddSpaces(string str, vector<int> &spaceList) {
    int str_size = str.size(), list_size = spaceList.size(), l_index = 0, s_index = 0;
    string finalStr(str_size + list_size, ' ');
    // Iterate over M+N length
    for (int p = 0; p < str_size + list_size; p++) {
        if (l_index < list_size and p == spaceList[l_index] + l_index)
            l_index++;
        else
            finalStr[p] = str[s_index++];
    }
    // Return the required string
    return finalStr;
}
int main() {
    string str = "welcometotutorialspoint";
    vector<int> spaceList = {7, 9};
    cout << "The updated string is : " << AddSpaces(str, spaceList) << endl;
    return 0;
}

输出

The updated string is : welcome to tutorialspoint

时间复杂度 − 当我们遍历列表并将字符串连接在一起时,时间复杂度为O(N + K)。

空间复杂度 − 当我们用空格初始化finalStr时,空间复杂度为O(N + K)。

第二种解决方案在时间复杂度方面更加优化,因为它同时遍历列表和字符串。第一种方法对于列表的每个元素都会遍历字符串。程序员还可以尝试在字符串索引之后插入空格,而不是之前。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程