给定一个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"
class Replacement { public: string replaceSpace(string iniString, int length) { string final; for (int i = 0; i < length; i++) { if (iniString[i]==' ') { final += "%20"; } else if (iniString[i]!=' ') { final += iniString[i]; } } return final; } };
我是对照着书来做的题目。
这道题目的本意是为了考察数组内的移动,本身题目的参数就给得有问题
我认为题目应该是这样的:
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; } };