给定一个string iniString 及其长度 int len, 已知该字符串中有空格,现要求编写程序将字符串中空格替换为“%20”。返回更改后的string。假设该字符串有足够的空间存放新增的字符,并且知道原字符的长度(小于等于1000),同时保证字符串由大小写的英文字母组成。
给定一个string iniString 及其长度 int len, 已知该字符串中有空格,现要求编写程序将字符串中空格替换为“%20”。返回更改后的string。假设该字符串有足够的空间存放新增的字符,并且知道原字符的长度(小于等于1000),同时保证字符串由大小写的英文字母组成。
"Mr John Smith",13
"Mr%20John%20Smith"
"Hello World",12
"Hello%20%20World"
我是对照着书来做的题目。
这道题目的本意是为了考察数组内的移动,本身题目的参数就给得有问题
我认为题目应该是这样的:
public String replaceSpaceA(char[] iniCharArr, int length) {
// 计算出新的长度
int spaceCount = 0;
for (int i = 0; i < length; i++) {
if (iniCharArr[i] == ' ') {
spaceCount ++;
}
}
// 从后面开始移起
int startIndex = length - 1;
int newLengthIndex = length + spaceCount * 2 -1;
while (startIndex != newLengthIndex) {
char moveChar = iniCharArr[startIndex];
if (moveChar == ' ') {
iniCharArr[newLengthIndex] = '0';
iniCharArr[newLengthIndex-1] = '2';
iniCharArr[newLengthIndex-2] = '%';
newLengthIndex -= 3;
} else {
iniCharArr[newLengthIndex] = moveChar;
newLengthIndex--;
}
startIndex--;
}
// 要截取一下,否则会通不过测试
return new String(iniCharArr, 0, length + spaceCount * 2);
}
};
//方式一:
public String replaceSpace(String iniString, int length) {
if(iniString==null||"".equals(iniString)||length<=0) return iniString;
return iniString.replace(" ","%20");
}
//方式二
public String replaceSpace(String iniString, int length) {
if(iniString==null||"".equals(iniString)||length<=0||iniString.length()!=length) return iniString;
StringBuffer sb=new StringBuffer("");
for(int i=0;i<length;i++){
if(iniString.charAt(i)==' ') sb.append("%20");
else sb.append(iniString.charAt(i));
}
return sb.toString();
}
//方法三:一样的道理
public String replaceSpace(String iniString, int length) {
if(iniString==null||"".equals(iniString)||length<=0||iniString.length()!=length) return iniString;
StringBuffer str=new StringBuffer(iniString);
str.insert(0,'#');
str.append('#');
String[] value=str.toString().split(" ");
StringBuffer sb=new StringBuffer();
for(int i=0;i<value.length;i++){
sb.append(value[i]);
if(i==value.length-1) break;
else sb.append("%20");
}
sb.deleteCharAt(0);
sb.deleteCharAt(sb.length()-1);
return sb.toString();
}
//只能想到比较笨的办法,时间复杂度o(n)
public class Replacement {
public String replaceSpace(String iniString, int length) {
// write code here
if(iniString==null||length==0){
return null;
}
StringBuilder sb = new StringBuilder();
for(int i=0;i<length;i++){
if(iniString.charAt(i)==' '){
sb.append("%20");
}else{
sb.append(iniString.charAt(i));
}
}
return sb.toString();
}
}
import java.util.*;
public class Replacement {
public String replaceSpace(String iniString, int length) {
// write code here
if (iniString == null || length <=0)
return null;
StringBuilder sb = new StringBuilder();
for (int i=0; i<length; i++){
if (iniString.charAt(i) == ' '){
sb.append('%');
sb.append('2');
sb.append('0');
}
else
sb.append(iniString.charAt(i));
}
return sb.toString();
}
}
import java.util.*;
public class Replacement {
public String replaceSpace(String iniString, int length) {
StringBuilder sb = new StringBuilder();
for(char c : iniString.toCharArray()){
if(c == ' '){
sb.append("%20");
} else {
sb.append(c);
}
}
return sb.toString();
}
}
import java.util.*;
public class Replacement {
public String replaceSpace(String iniString, int length) {
return iniString.replace(" ", "%20");
}
}
class Replacement {
public:
string replaceSpace(string iniString, int length) {
// write code here
for(int i = 0; i < length; i++){
if(iniString[i] == ' '){
iniString.push_back('0');
iniString.push_back('0');
}
}
int siz = iniString.size();
int pos = siz - 1;
for(int i = length-1; i >= 0; i--){
if(iniString[i] != ' '){
iniString[pos--] = iniString[i];
}
else{
iniString[pos--] = '0';
iniString[pos--] = '2';
iniString[pos--] = '%';
}
}
return iniString;
}
};
import java.util.*;
//剑指Offer的思路
public class Replacement {
public String replaceSpace(String string, int originalLength) {
if (string == null || originalLength <= 0) return null;
int numberOfBlank = 0;//字符串的空格数目
//这里的长度是原始长度
for (int i = 0; i < originalLength; i++) {
if (string.charAt(i) == ' ')
numberOfBlank++;
}
//新的字符串长度为原字符串的长度+2*空格数目
int newLength = originalLength + 2 * numberOfBlank;
char[]temp = new char[newLength];
for (int i =0;i<originalLength;i++) {
temp[i]=string.charAt(i);
}
int indexOfOriginal = originalLength - 1;
int indexOfNew = newLength - 1;
while (indexOfOriginal >= 0 && indexOfNew > indexOfOriginal) {
if (temp[indexOfOriginal] == ' ') {
temp[indexOfNew--] = '0';
temp[indexOfNew--] = '2';
temp[indexOfNew--] = '%';
} else {
//复制字符串
temp[indexOfNew--] = temp[indexOfOriginal];
}
--indexOfOriginal;
}
return new String(temp);
}
}