九度1510(字符串)

题目1510:替换空格


时间限制:1 秒

内存限制:128 兆

特殊判题:否

提交:2553

解决:677

题目描述:
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。

输入:
每个输入文件仅包含一组测试样例。
 对于每组测试案例,输入一行代表要处理的字符串。

输出:
对应每个测试案例,出经过处理后的字符串。

样例输入:
 We Are Happy
样例输出:
 We%20Are%20Happy

 

题解

      本体题型很是常规,通常可以采用从左到右依次移动处理每个元素,此过程中涉及到移动后续元素,时间复杂度为O(n^2);为了减小时间复杂度,可以额外开辟另一数组,牺牲空间换取时间,此算法时间复杂度为O(n);仔细一想,可以尝试从右到左在原数组基础上处理,时间复杂度可以有效降到O(n)且不额外开辟存储空间。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;

int main()
{
	string str;
	char ch[10000000];
	while(getline(cin,str))
	//while(gets(ch))
	{		
		int i,count=0,size=str.size();
		for(i=0;i<size;i++)
		{
			if(str[i]==' ')count++;
		}

		i=size-1;
		ch[i+1+count*2]=0;
		while(i>=0)
		{
			if(str[i]==' ')
			{
				ch[i+count*2]='0';
				ch[i+count*2-1]='2';
				ch[i+count*2-2]='%';
				count--;
			}
			else 
				ch[i+count*2]=str[i];
			i--;
		}
		printf("%s\n",ch);
	}
	return 0;
}


 

你可能感兴趣的:(字符串)