04_替换空格

来源:互联网 发布:网络水军如盛 编辑:程序博客网 时间:2024/05/23 07:24

题目:实现一个函数,把字符串中的每个空格替换成”%20”。例如”I like it”,”I%20like%20it”

思路:如果直接每次遇到空格添加’%20’,那么空格后面的数字就需要频繁向后移动。遇到这种移动问题,我们可以尝试先给出最终需要的长度,然后从后向前扫描,同时给定两个指针来保证定位。

Java版本

public class replaceBlank {    //length:最大长度        originalLength:字符串的实际长度    public void replace(char string[],int length,int originalLength)    {        if(string == null || length <= 0)        {            return  ;        }        int numberOfBlank = 0;        for(int i=0;i<originalLength;i++)        {            if(string[i] == ' ')            {                numberOfBlank++;            }        }        //newLength:替换后的字符串的长度        int newLength = originalLength + numberOfBlank * 2;        if(newLength > length)            return ;        //从后往前        int indexOfOriginal = originalLength-1;        int indexOfNew = newLength-1;        while(indexOfOriginal >= 0 && indexOfNew >= indexOfOriginal)        {            if(string[indexOfOriginal] == ' ')            {                string[indexOfNew--] = '0';                string[indexOfNew--] = '2';                string[indexOfNew--] = '%';            }            else            {                string[indexOfNew--] = string[indexOfOriginal];            }            indexOfOriginal--;        }       }    public static void output(String input,int max)    {        char[] output= new char[max];        if(input == null)        {            System.out.print("字符串输入错误");            return  ;        }        int originalLength = input.length();        System.out.println("原字符串:"+ input);        for(int i=0;i<originalLength;i++)        {            char ch = input.charAt(i);            output[i] = ch;        }        replaceBlank a = new replaceBlank();        a.replace(output,max,originalLength);        System.out.print("现字符串:");        System.out.println(output);    }    public static void main(String[] args) {        int max=100;        String str1 = "hello world";// 空格在句子中间        output(str1,max);        String str2 = "hello  world";// 连续有两个空格        output(str2,max);        String str3 = " helloworld";// 空格在句子开头        output(str3,max);        String str4 = " helloworld ";// 空格在句子末尾        output(str4,max);        String str5 = "";// 传入内容为空的字符串        output(str5,max);        String str6 = " ";// 传入内容为一个空格的字符串        output(str6,max);        String str7 = "       ";// 传入的字符串全是空格        output(str7,max);        String str8 = null;// 传入NULL        output(str8,max);    }}

这里写图片描述

Python版本:

# -*- coding:utf-8 -*-# Python中string 不能改变,所以要创造一个新的string来进行操作def replace(string,length):    if(string == None or length <= 0 or not isinstance(string,str)):        return ""    originalLength = len(string)    numberOfBlank = 0    for i in string:        if(i == ' '):            numberOfBlank += 1    newLength = originalLength + numberOfBlank * 2    if(newLength > length):        return     #从后往前    indexOfOriginal = originalLength-1    indexOfNew = newLength-1    newStr = newLength * [None]    while(indexOfOriginal >= 0 and indexOfNew >= indexOfOriginal):        if(string[indexOfOriginal] == ' '):            newStr[indexOfNew] = '0'            indexOfNew -= 1            newStr[indexOfNew] = '2'            indexOfNew -= 1            newStr[indexOfNew] = '%'            indexOfNew -= 1        else:            newStr[indexOfNew] = string[indexOfOriginal]            indexOfNew =indexOfNew- 1        indexOfOriginal -= 1    return "".join(newStr)str1 = 'hello world'  # 空格在句子中间str2 = 'hello  world' # 连续有两个空格str3 = ' helloworld'  # 空格在句子开头str4 = ''             # 空字符串str5 = ' '            # 一个空格str6 = '       '      # 全是空格str7 = None           # 传入Nonestr8 = 'None'         # 传入字符串Noneprint('原字符串:',str1)print('现字符串:',replace(str1,100))print('原字符串:',str2)print('现字符串:',replace(str2,100))print('原字符串:',str3)print('现字符串:',replace(str3,100))print('原字符串:',str4)print('现字符串:',replace(str4,100))print('原字符串:',str5)print('现字符串:',replace(str5,100))print('原字符串:',str6)print('现字符串:',replace(str6,100))print('原字符串:',str7)print('现字符串:',replace(str7,100))print('原字符串:',str8)print('现字符串:',replace(str8,100))

这里写图片描述

0 0
原创粉丝点击