3.替换空格(python,java,C#,C)实现

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

python版本:

# -*- coding:utf-8 -*-
class Solution:
    # s 源字符串
    def replaceSpace(self, s):
        # write code here
        return s.replace(" ","%20")

java版本:

在原有的字符串中修改:
思想:从后往前添加,每个字符只需移动一次,遇到空格,替换%20,效率高,移动次数少
先计算出原有的字符串空格的个数,扩展原有字符串长度,新长度=原有长度+空格个数*2,往后移动字符,遇到空格就替换

public class Solution {
    public String replaceSpace(StringBuffer str) {
	    if(str==null)
		{
			return null;
		}
    	int spaceCount=0;
		for (int i =0;i<str.length();i++)
		{
			//if str[i]=" ";
            if(str.charAt(i)==' '){
                spaceCount+=1;
            }
		}
		int indexold=str.length()-1;//原来下标
		int newLength=str.length()+spaceCount*2;//新长度
		int indexNew=newLength-1;//新下标
		
		str.setLength(newLength);
		//开始移动
		for(;indexold>=0&&indexold<newLength;indexold--)
		{
			if(str.charAt(indexold)==' ')
			{
				str.setCharAt(indexNew--,'0');
				str.setCharAt(indexNew--,'2');
				str.setCharAt(indexNew--,'%');
			}
			else{
				str.setCharAt(indexNew--,str.charAt(indexold));
			}
		}
		return str.toString();
    }
}

开辟新的空间,从前往后替换:

public class Solution {
    public String replaceSpace(StringBuffer str) {
	    if(str==null)
		{
			return null;
		}
    	StringBuilder newStr = new StringBuilder();
		//开始移动
		for(int i=0;i<str.length();i++)
		{
			if(str.charAt(i)==' ')
			{
				newStr.append('%');
				newStr.append('2');
				newStr.append('0');
			}
			else{
				newStr.append(str.charAt(i));
			}
		}
		return newStr.toString();
    }
}


C/C++实现:

class Solution {
public:
	void replaceSpace(char *str,int length) {
		if(str==NULL || length<=0)
            return;        
        int old_strlength=0;
        int blankNum=0;
        int i=0;
        while(str[i]!='\0'){
            ++old_strlength;
            if(str[i]==' '){
                ++blankNum;
            }
            ++i;
        }
        int newstrLength=old_strlength+blankNum*2;
        if(newstrLength>length){
            return;
        }
        int indexoldstr=old_strlength;
        int indexNewstr=newstrLength;
        while(indexoldstr>=0 && indexNewstr>indexoldstr){
            if (str[indexoldstr]==' '){
                str[indexNewstr--]='0';
                str[indexNewstr--]='2';
                str[indexNewstr--]='%';
            }
            else{
                str[indexNewstr--]=str[indexoldstr];
            }
            --indexoldstr;
        }
	}
};

C#实现:

class Solution
{
    public string replaceSpace(string str)
    {
        // write code here
        return str.Replace(" ","%20");
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值