目录
字符串插入
要求:
总时间限制: 1000ms
内存限制: 65536kB
描述:
有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的'\0'。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
输入:
输入包括若干行,每一行为一组测试数据,格式为
str substr
输出:
对于每一组测试数据,输出插入之后的字符串。
样例输入:
abcab eee 12343 555
样例输出:
abceeeab 12345553
思路分析:
这个题目也是一个十分平凡的题目,一个最自然的想法就是遍历一遍str,找到第一个最大元素,再插入字符串即可。由于字符串普遍不长,所以时间也是完全允许的。
但是一个更好的想法还是利用 map< char, short, greater<char> > 的STL来实现更快的查找.唯一需要注意的点就是关于string和char*的选择.string会损失一定的性能(不多),但是编码十分简洁.char*会有一定的性能提升,但是编码比较复杂.我在此处选择的是前者,因为性能要求不高.
最终代码:
#include<iostream>
#include<map>
using namespace std;
int main(){
string str;
string substr;
map<char,short,greater<char> > mm;
while(cin>>str>>substr){
int len=str.size();
for(int i=0;i<len;i++){
mm.insert(pair<char,short>(str[i],i));
}
int pos=mm.begin()->second+1;//insert函数需要+1
str.insert(pos,substr);
printf("%s\n",str.c_str());
mm.clear();
}
}