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
- 04_替换空格
- 20170928_替换空格
- 面试题04_替换空格_剑指Offer系列
- 剑指Offer_面试题04_替换空格
- 面试题4:字符串_空格替换
- 面试题4_替换空格
- 04 替换空格
- 04_ReplaceBlank替换空格
- 剑指offer 04 :替换空格
- 剑指offer 04 替换空格
- 正则表达式,把所有的空格替换成"_"
- 空格替换
- 替换空格
- 空格替换
- 替换空格
- 替换空格
- 替换空格
- 替换空格
- TopCoder:ZigZag(动态规划--最长非降子序列)
- 通过USB-CDROM在Y450上安装WinXP
- 2.1.1 Speed Limit
- 笔记11-JAVA的初学浅识(Java Number & Math 类)
- .aspx.cs不存在,问题原因
- 04_替换空格
- 电线的一些小知识学习一下
- 省赛的总结
- 旋转矩阵(Rotate Matrix)的性质分析
- JQuery树形控件
- javascript浅拷贝与深拷贝
- 在线查看android源码方法
- Linux CentOS 节点之间的SSH无密钥登录配置
- Ubuntu 下安装Go语言