替换空格

来源:互联网 发布:小米手机怎么数据迁移 编辑:程序博客网 时间:2024/06/05 08:58

题目描述

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

思路分析:

可以想到两种解决方案

第一种创建新的字符串,在新的字符串中进行替换

第二种就是在原来的字符串上做替换,并且保证输入的字符串后面有足够多的多余空间

这里我用的是第二种在原来字符串上进行替换,替换的顺序有两种,从前向后替换和从后向前替换,从前向后替换时间复杂度为O(n2),所以还是采用的从后向前替换的方法,这样的话,字符挪动的次数就是一次,也就字符串长度为n,时间复杂为O(n)

具体实现及相关过程:

#include<stdio.h>#include<stdlib.h>#include<string.h>void replaceBlank(char *s, int length);void replaceBlank(char *s, int length) {    int originLength = 0,        newLength = 0,        numberOfBlank = 0,        i = 0,        originIndex = 0,        newIndex = 0;    //得到实际字符串的长度和空格的个数     while(s[i] != '\0') {        originLength++;        if(s[i] == ' ') {            numberOfBlank++;        }        i++;    }    //计算出新的字符串的长度(一个空格使得长度增加2)     newLength = originLength + numberOfBlank * 2;    //originIndex指向原来字符串的最后一个字符     originIndex = originLength;    //newIndex指向新字符串的最后一个字符     newIndex = newLength;    /*    当originIndex指向的是一个空格的时候,就需要用'%20'进行替换    (这个过程中newIndex需要移动三个位置),否则就要进行复制,    将originIndex所指向的字符复制到newIndex所指向的位置,然后    originIndex不断向前移动        */     while(originIndex >= 0 && newIndex > originIndex) {        if(s[originIndex] == ' ') {            s[newIndex--] = '0';            s[newIndex--] = '2';            s[newIndex--] = '%';        } else {            s[newIndex--] = s[originIndex];        }        originIndex--;    } }void main(void) {    char s[100];    gets(s);    replaceBlank(s, 100);    puts(s);} 

创建新的字符串的解法:

package com.offer.exec;import java.util.Scanner;public class ReplaceBlank {     public String replace(StringBuffer s) {        if(s == null) {            return null;        }        StringBuffer str = new StringBuffer();        for(int i = 0; i < s.length(); i++) {            if(s.charAt(i) == ' ') {                str.append('%');                str.append('2');                str.append('0');            }else {                str.append(s.charAt(i));            }        }        return str.toString();    }    public static void main(String args[]) {        ReplaceBlank rb = new ReplaceBlank();        StringBuffer sb = new StringBuffer();        Scanner in = new Scanner(System.in);        sb.append(in.nextLine());        System.out.println(rb.replace(sb));    }}
原创粉丝点击