给定一个由N个小写字母组成的字符串S 和字符对的数组P[][2] ,任务是通过用字符P[i][1]替换所有出现的字符P[i][0]来修改给定的字符串S。
例子:
Input: S = “aabbgg”, P[][2] = {{a, b}, {b, g}, {g, a}}
Output: bbggaa
Explanation:
Replace ‘a’ by ‘b’ in the original string. Now the string S modifies to “bbbbgg”.
Replace ‘b’ by ‘g’ in the original string. Now the string S modifies to “bbgggg”.
Replace ‘g’ by ‘a’ in the original string. Now the string S modifies to “bbggaa”.
Input: S = “abc”, P[][2] = {{a, b}}
Output: bbc
朴素的方法:解决给定问题的最简单方法是创建原始字符串S的副本,然后对每一对(a, b)遍历字符串,如果找到字符‘a’则将其替换为字符‘b’在原始字符串的副本中。检查所有对后,打印修改后的字符串S 。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to modify given string
// by replacement of characters
void replaceCharacters(
string s, vector > p)
{
// Store the length of the string
// and the number of pairs
int n = s.size(), k = p.size();
// Create a copy of the string s
string temp = s;
// Traverse the pairs of characters
for (int j = 0; j < k; j++) {
// a -> Character to be replaced
// b -> Replacing character
char a = p[j][0], b = p[j][1];
// Traverse the original string
for (int i = 0; i < n; i++) {
// If an occurrence of a is found
if (s[i] == a) {
// Replace with b
temp[i] = b;
}
}
}
// Print the result
cout << temp;
}
// Driver Code
int main()
{
string S = "aabbgg";
vector > P{ { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
return 0;
}
Java
// Java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
class GFG{
// Function to modify given string
// by replacement of characters
static void replaceCharacters(String s, char p[][])
{
// Store the length of the string
// and the number of pairs
int n = s.length(), k = p.length;
// Create a copy of the string s
char temp[] = s.toCharArray();
// Traverse the pairs of characters
for(int j = 0; j < k; j++)
{
// a -> Character to be replaced
// b -> Replacing character
char a = p[j][0], b = p[j][1];
// Traverse the original string
for(int i = 0; i < n; i++)
{
// If an occurrence of a is found
if (s.charAt(i) == a)
{
// Replace with b
temp[i] = b;
}
}
}
// Print the result
System.out.println(new String(temp));
}
// Driver Code
public static void main(String[] args)
{
String S = "aabbgg";
char P[][] = { { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
}
}
// This code is contributed by Kingash
Python3
# Python3 program for the above approach
# Function to modify given string
# by replacement of characters
def replaceCharacters(s, p):
# Store the length of the string
# and the number of pairs
n = len(s)
k = len(p)
# Create a copy of the string s
temp = s
# Traverse the pairs of characters
for j in range(k):
# a -> Character to be replaced
# b -> Replacing character
a = p[j][0]
b = p[j][1]
# Traverse the original string
for i in range(n):
# If an occurrence of a is found
if (s[i] == a):
# Replace with b
temp = list(temp)
temp[i] = b
temp = ''.join(temp)
# Print the result
print(temp)
# Driver Code
if __name__ == '__main__':
S = "aabbgg"
P = [ [ 'a', 'b' ],
[ 'b', 'g' ],
[ 'g', 'a' ] ]
replaceCharacters(S, P)
# This code is contributed by ipg2016107
C#
// C# program for the above approach
using System;
class GFG{
// Function to modify given string
// by replacement of characters
static void replaceCharacters(string s, char[,] p)
{
// Store the length of the string
// and the number of pairs
int n = s.Length, k = p.GetLength(0);
// Create a copy of the string s
char[] temp = s.ToCharArray();
// Traverse the pairs of characters
for(int j = 0; j < k; j++)
{
// a -> Character to be replaced
// b -> Replacing character
char a = p[j, 0], b = p[j, 1];
// Traverse the original string
for(int i = 0; i < n; i++)
{
// If an occurrence of a is found
if (s[i] == a)
{
// Replace with b
temp[i] = b;
}
}
}
// Print the result
Console.WriteLine(new string(temp));
}
// Driver Code
public static void Main(string[] args)
{
string S = "aabbgg";
char [,]P = { { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
}
}
// This code is contributed by ukasp
Javascript
C++
// C++ program for the above approach
#include
using namespace std;
// Function to modify given
// string by replacing characters
void replaceCharacters(
string s, vector > p)
{
// Store the size of string
// and the number of pairs
int n = s.size(), k = p.size();
// Initialize 2 character arrays
char arr[26];
char brr[26];
// Traverse the string s
// Update arrays arr[] and brr[]
for (int i = 0; i < n; i++) {
arr[s[i] - 'a'] = s[i];
brr[s[i] - 'a'] = s[i];
}
// Traverse the array of pairs p
for (int j = 0; j < k; j++) {
// a -> Character to be replaced
// b -> Replacing character
char a = p[j][0], b = p[j][1];
// Iterate over the range [0, 25]
for (int i = 0; i < 26; i++) {
// If it is equal to current
// character, then replace it
// in the array b
if (arr[i] == a) {
brr[i] = b;
}
}
}
// Print the array brr[]
for (int i = 0; i < n; i++) {
cout << brr[s[i] - 'a'];
}
}
// Driver Code
int main()
{
string S = "aabbgg";
vector > P{ { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Function to modify given
// string by replacing characters
static void replaceCharacters(String s, char[][] p)
{
// Store the size of string
// and the number of pairs
int n = s.length(), k = p.length;
// Initialize 2 character arrays
char[] arr = new char[26];
char[] brr = new char[26];
// Traverse the string s
// Update arrays arr[] and brr[]
for(int i = 0; i < n; i++)
{
arr[s.charAt(i) - 'a'] = s.charAt(i);
brr[s.charAt(i) - 'a'] = s.charAt(i);
}
// Traverse the array of pairs p
for(int j = 0; j < k; j++)
{
// a -> Character to be replaced
// b -> Replacing character
char a = p[j][0], b = p[j][1];
// Iterate over the range [0, 25]
for(int i = 0; i < 26; i++)
{
// If it is equal to current
// character, then replace it
// in the array b
if (arr[i] == a)
{
brr[i] = b;
}
}
}
// Print the array brr[]
for(int i = 0; i < n; i++)
{
System.out.print(brr[s.charAt(i) - 'a']);
}
}
// Driver code
public static void main(String[] args)
{
String S = "aabbgg";
char[][] P = { { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
}
}
// This code is contributed by offbeat
Python3
# Python3 program for the above approach
# Function to modify given
# string by replacing characters
def replaceCharacters(s, p):
# Store the size of string
# and the number of pairs
n, k = len(s), len(p)
# Initialize 2 character arrays
arr = [0] * 26
brr = [0] * 26
# Traverse the string s
# Update arrays arr[] and brr[]
for i in range(n):
arr[ord(s[i]) - ord('a')] = s[i]
brr[ord(s[i]) - ord('a')] = s[i]
# Traverse the array of pairs p
for j in range(k):
# a -> Character to be replaced
# b -> Replacing character
a, b = p[j][0], p[j][1]
# Iterate over the range [0, 25]
for i in range(26):
# If it is equal to current
# character, then replace it
# in the array b
if (arr[i] == a):
brr[i] = b
# Print the array brr[]
for i in range(n):
print(brr[ord(s[i]) - ord('a')], end = "")
# Driver Code
if __name__ == '__main__':
S = "aabbgg"
P = [ [ 'a', 'b' ],
[ 'b', 'g' ],
[ 'g', 'a' ] ]
replaceCharacters(S, P)
# This code is contributed by mohit kumar 29
C#
// C# program for the above approach
using System;
public class GFG{
// Function to modify given
// string by replacing characters
static void replaceCharacters(string s, char[,] p)
{
// Store the size of string
// and the number of pairs
int n = s.Length, k = p.GetLength(0);
// Initialize 2 character arrays
char[] arr = new char[26];
char[] brr = new char[26];
// Traverse the string s
// Update arrays arr[] and brr[]
for(int i = 0; i < n; i++)
{
arr[s[i] - 'a'] = s[i];
brr[s[i] - 'a'] = s[i];
}
// Traverse the array of pairs p
for(int j = 0; j < k; j++)
{
// a -> Character to be replaced
// b -> Replacing character
char a = p[j,0], b = p[j,1];
// Iterate over the range [0, 25]
for(int i = 0; i < 26; i++)
{
// If it is equal to current
// character, then replace it
// in the array b
if (arr[i] == a)
{
brr[i] = b;
}
}
}
// Print the array brr[]
for(int i = 0; i < n; i++)
{
Console.Write(brr[s[i] - 'a']);
}
}
// Driver code
static public void Main ()
{
String S = "aabbgg";
char[,] P = { { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
}
}
// This code is contributed by avanitrachhadiya2155
Javascript
bbggaa
时间复杂度: O(K * N)
辅助空间: O(N)
高效方法:可以通过使用两个大小为26 的辅助数组来存储数组中的替换来优化上述方法。请按照以下步骤解决问题:
- 初始化大小为26 的两个数组arr[]和brr[] ,并将字符串S的字符存储在两个数组中。
- 使用变量i遍历P对数组并执行以下步骤:
- 将A初始化为P[i][0] ,将B初始化为P[i][1] ,表示字符A将被字符B替换。
- 使用变量j在范围[0, 25] 上迭代,如果arr[j]等于A ,则将brr[j]更新为B 。
- 遍历给定的字符串S并对每个S[i] 将其更新为brr[S[i] – ‘a’] 。
- 完成上述步骤后,打印修改后的字符串S 。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to modify given
// string by replacing characters
void replaceCharacters(
string s, vector > p)
{
// Store the size of string
// and the number of pairs
int n = s.size(), k = p.size();
// Initialize 2 character arrays
char arr[26];
char brr[26];
// Traverse the string s
// Update arrays arr[] and brr[]
for (int i = 0; i < n; i++) {
arr[s[i] - 'a'] = s[i];
brr[s[i] - 'a'] = s[i];
}
// Traverse the array of pairs p
for (int j = 0; j < k; j++) {
// a -> Character to be replaced
// b -> Replacing character
char a = p[j][0], b = p[j][1];
// Iterate over the range [0, 25]
for (int i = 0; i < 26; i++) {
// If it is equal to current
// character, then replace it
// in the array b
if (arr[i] == a) {
brr[i] = b;
}
}
}
// Print the array brr[]
for (int i = 0; i < n; i++) {
cout << brr[s[i] - 'a'];
}
}
// Driver Code
int main()
{
string S = "aabbgg";
vector > P{ { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Function to modify given
// string by replacing characters
static void replaceCharacters(String s, char[][] p)
{
// Store the size of string
// and the number of pairs
int n = s.length(), k = p.length;
// Initialize 2 character arrays
char[] arr = new char[26];
char[] brr = new char[26];
// Traverse the string s
// Update arrays arr[] and brr[]
for(int i = 0; i < n; i++)
{
arr[s.charAt(i) - 'a'] = s.charAt(i);
brr[s.charAt(i) - 'a'] = s.charAt(i);
}
// Traverse the array of pairs p
for(int j = 0; j < k; j++)
{
// a -> Character to be replaced
// b -> Replacing character
char a = p[j][0], b = p[j][1];
// Iterate over the range [0, 25]
for(int i = 0; i < 26; i++)
{
// If it is equal to current
// character, then replace it
// in the array b
if (arr[i] == a)
{
brr[i] = b;
}
}
}
// Print the array brr[]
for(int i = 0; i < n; i++)
{
System.out.print(brr[s.charAt(i) - 'a']);
}
}
// Driver code
public static void main(String[] args)
{
String S = "aabbgg";
char[][] P = { { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
}
}
// This code is contributed by offbeat
蟒蛇3
# Python3 program for the above approach
# Function to modify given
# string by replacing characters
def replaceCharacters(s, p):
# Store the size of string
# and the number of pairs
n, k = len(s), len(p)
# Initialize 2 character arrays
arr = [0] * 26
brr = [0] * 26
# Traverse the string s
# Update arrays arr[] and brr[]
for i in range(n):
arr[ord(s[i]) - ord('a')] = s[i]
brr[ord(s[i]) - ord('a')] = s[i]
# Traverse the array of pairs p
for j in range(k):
# a -> Character to be replaced
# b -> Replacing character
a, b = p[j][0], p[j][1]
# Iterate over the range [0, 25]
for i in range(26):
# If it is equal to current
# character, then replace it
# in the array b
if (arr[i] == a):
brr[i] = b
# Print the array brr[]
for i in range(n):
print(brr[ord(s[i]) - ord('a')], end = "")
# Driver Code
if __name__ == '__main__':
S = "aabbgg"
P = [ [ 'a', 'b' ],
[ 'b', 'g' ],
[ 'g', 'a' ] ]
replaceCharacters(S, P)
# This code is contributed by mohit kumar 29
C#
// C# program for the above approach
using System;
public class GFG{
// Function to modify given
// string by replacing characters
static void replaceCharacters(string s, char[,] p)
{
// Store the size of string
// and the number of pairs
int n = s.Length, k = p.GetLength(0);
// Initialize 2 character arrays
char[] arr = new char[26];
char[] brr = new char[26];
// Traverse the string s
// Update arrays arr[] and brr[]
for(int i = 0; i < n; i++)
{
arr[s[i] - 'a'] = s[i];
brr[s[i] - 'a'] = s[i];
}
// Traverse the array of pairs p
for(int j = 0; j < k; j++)
{
// a -> Character to be replaced
// b -> Replacing character
char a = p[j,0], b = p[j,1];
// Iterate over the range [0, 25]
for(int i = 0; i < 26; i++)
{
// If it is equal to current
// character, then replace it
// in the array b
if (arr[i] == a)
{
brr[i] = b;
}
}
}
// Print the array brr[]
for(int i = 0; i < n; i++)
{
Console.Write(brr[s[i] - 'a']);
}
}
// Driver code
static public void Main ()
{
String S = "aabbgg";
char[,] P = { { 'a', 'b' },
{ 'b', 'g' },
{ 'g', 'a' } };
replaceCharacters(S, P);
}
}
// This code is contributed by avanitrachhadiya2155
Javascript
bbggaa
时间复杂度: O(N + K)
辅助空间: O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。