0

0

通过将给定字符的所有出现替换为指定的替换字符来修改字符串

WBOY

WBOY

发布时间:2023-09-08 10:17:02

|

1261人浏览过

|

来源于tutorialspoint

转载

通过将给定字符的所有出现替换为指定的替换字符来修改字符串

在这个问题中,我们需要根据字符对数组中给定的字符替换给定字符串的字符。我们将讨论两种不同的解决方法。在第一种方法中,我们通过遍历给定字符串的字符和字符对来替换每个字符。

在第二种方法中,我们将使用一个长度为26的数组来存储与每个字符相关的替换字符,并改变给定字符串的字符。

问题陈述 − 我们给定了一个包含N个小写字母字符的字符串str。同时,我们给定了包含字符对的数组。我们需要用pairs[i][1]替换给定字符串中的pairs[i][0]字符。

示例例子

Input –  str = "xyz", pairs = {{'x', 'a'}, {'y', 'b'},, {'z', 'c'}}
Output – ‘abc’

说明

在这里,‘x’被替换为‘a’,‘y’被替换为‘b’,‘z’被替换为‘c’。

Input – str = "abderb", pairs = {{'a', 'e'}, {'b', 't'}, {'e', 'f'}, {'r', 's'}}
Output – ‘etdfst’

说明

在字符串中,'a'被替换为'e','b'被替换为't','e'被替换为'f','r'被替换为's'。

方法一

在这种方法中,我们将迭代每对字符,并在给定的字符串中替换匹配的字符。我们需要两个嵌套循环来迭代每个循环的字符串。

算法

  • 步骤 1 - 将字符串的大小存储在变量 'N' 中,并将数组存储在变量 'M' 中。

  • 步骤 2 - 将字符串的副本存储在 'temp' 变量中。

  • 步骤 3 - 使用 for 循环遍历配对列表。

  • 步骤 4 − 在循环中,将第一个字符存储在变量‘a’中,将第二个字符存储在变量‘b’中。

  • 第5步 - 使用嵌套循环迭代字符串。

  • 步骤 6 − 在嵌套循环中,如果给定字符串的当前字符等于 'a',则将当前字符替换为 'b' 在临时字符串中。

  • 第7步 - 返回temp的值。

示例

#include 
using namespace std;
string replaceChars(string str, vector> pairs){
   // stror the size of the string and the array
   int N = str.size(), M = pairs.size();
   
   // Create a copy of the string str
   string temp = str;
   
   // Iterate over the array
   for (int x = 0; x < M; x++){
   
      // store the characters from the pair
      char a = pairs[x][0], b = pairs[x][1];
      
      // iterate over the string
      for (int y = 0; y < N; y++){
      
         // If the character is equal to a, then replace it with b
         if (str[y] == a){
            temp[y] = b;
         }
      }
   }
   return temp;
}
int main(){
   string str = "abderb";
   vector> pairs{{'a', 'e'},
      {'b', 't'},
      {'e', 'f'},
      {'r', 's'}};
   cout << "The string after replacing with the given characters is - " << replaceChars(str, pairs);
   return 0;
}

输出

The string after replacing with the given characters is - etdfst	

时间复杂度 - O(N*M),其中N是字符串的长度,M是字符对数组的长度。

企奶奶
企奶奶

一款专注于企业信息查询的智能大模型,企奶奶查企业,像聊天一样简单。

下载

空间复杂度 - O(N),因为我们将新字符串存储在temp变量中。

方法二

在这种方法中,我们可以创建一个大小为26的数组。然后,我们可以将可替换的字符存储在当前字符的位置上。最后,我们可以从数组中取出可替换的元素,并更新字符串的每个字符。

算法

  • 步骤 1 - 获取字符串大小为 'N' 和数组大小为 'M'。

  • 第二步 - 定义长度为26的“初始”和“最终”数组。

  • 第三步 - 遍历字符串并将str[Y]存储在“str[Y] - a”的初始和最终数组索引中。这里,str[Y] - 'a'根据字符的ASCII值给出0到25之间的索引。

  • 将str[Y]存储在初始和最终数组的'str[Y] - a'位置的原因是,如果字符串中存在任何字符但在字符对中不存在,我们可以在最终字符串中保持它不变。

  • 第四步 - 迭代给定的字符对数组。在循环中,使用嵌套循环来迭代初始数组。如果当前字符对的第一个字符等于“initial”数组的字符,则使用当前字符对的第二个字符对更新“final”数组的字符。

  • 步骤 5 − 定义‘result’变量,并初始化为空字符串。

  • 步骤 6 - 遍历输入字符串,从“final”数组中获取当前字符的相应字符,并将其追加到“result”字符串中。

  • 步骤 7 - 返回 'result' 字符串。

示例

#include 
using namespace std;
//  Function to replace the characters in the string
string replaceChars(string str, vector> pairs){

   // getting the size of the string and the vector
   int N = str.size(), M = pairs.size();
   
   // Declare two arrays of size 26
   char initial[26];
   char final[26];
   
   // Check all existing characters in the string
   for (int Y = 0; Y < N; Y++){
      initial[str[Y] - 'a'] = str[Y]; final[str[Y] - 'a'] = str[Y];
   }
   
   // Iterate over the range [0, M]
   for (int X = 0; X < M; X++){
   
      // get characters from the vector
      char a = pairs[X][0], b = pairs[X][1];
      
      // Iterate over the range [0, 26]
      for (int Y = 0; Y < 26; Y++){
      
         // If the character is the same as a, then replace it with b in the final array
         if (initial[Y] == a){
            final[Y] = b;
         }
      }
   }
   string result = "";
   
   // get the final string using the final array
   for (int Y = 0; Y < N; Y++){
      result += final[str[Y] - 'a'];
   }
   return result;
}
int main(){
   string str = "aberb";
   vector> pairs{{'a', 'e'},
      {'b', 't'},
      {'e', 'f'},
      {'r', 's'}};
   cout << "The string after replacing with the given characters is - " << replaceChars(str, pairs);
   return 0;
}

输出

The string after replacing with the given characters is - etfst

时间复杂度 - O(N),作为嵌套循环,仅进行常量迭代。

空间复杂度 - O(1),因为它使用一个长度为26的数组,是常数。

相关专题

更多
java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1490

2023.10.24

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

278

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

212

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1490

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

621

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

551

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

566

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

166

2025.07.29

菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
进程与SOCKET
进程与SOCKET

共6课时 | 0.3万人学习

PHP自制框架
PHP自制框架

共8课时 | 0.6万人学习

Swoft2.x速学之http api篇课程
Swoft2.x速学之http api篇课程

共16课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号