深信服校招编程题-替换字符串里的字符

题目描述 给出一个数字组成的字符串s及n个数字变换(a,b),每个变换(a,b)是字符串里面不存在的数字a,则不做变换。 输出全部操作完后的字符串。注:注意

题目描述

给出一个数字组成的字符串s及n个数字变换(a,b),每个变换(a,b)是字符串里面不存在的数字a,则不做变换。

输出全部操作完后的字符串。注:注意算法效率。

输入描述

第一行一串0-9组成的字符串s

第二行一个整数n

第三行开始的n行每行是两个数a b代表数字a变成b

数据规模

1<=字符串s的长度<=1000000

1<=n<=1000000

输出描述

变换后的字符串

样例

输入

0285289430826

2

0 2

2 3

输出

3385389433836

代码1

功能实现了,测试用例也通过了,但是通过率0%不知道是不是算法效率的问题。

#include 
#include 
#include 
using namespace std;
string s;	//输入的s字符串
unsigned int n;		//变换的数的个数
char a[10];
char b[10];
bool c;
int len;
int main() {cin >> s;len = s.size();if (len < 1 && len> 1000000)return 0 ;cin >> n;if (n < 1 && n > 1000000)return 0;for (int k = 0; k < n; k++){cin >> a[k] >>b[k];	replace(s.begin(), s.end(), a[k], b[k]);c = s.find(a[k]);if (c != 1)return 0 ;}cout  << s << endl;return 0;
}

代码2

功能也实现了,但是答题时间过了,没有实验能否通过。

#include 
#include 
using namespace std;
int main()
{string s ;int n;char a, b;cin >> s;cin >> n;int len = s.size();for (int k = 0; k < n; k++){cin >> a >> b;for (int i = 0; i < len; i++){if (s[i] == a){s[i]= b;}}}cout << s <<endl;return 0;
}