您的位置:首页 > 其它

字符串替换空格

2017-09-04 16:21 337 查看
题目:实现一个函数,把字符串中的每一个空格替换为“%20”。

public class ReplaceBlack {
public static void main(String[] args) {

char[] result = replaceBlack("how are you!");
if (result != null) {
printchar(result);
}

}

// 替换空格
public static char[] replaceBlack(String originstr) {
char[] testchar;
if (originstr.length() > 00 && originstr != null) {
int oldlength = originstr.length();
int newlength = getBlackCount(originstr) * 2 + oldlength;//一个字符串变成了3个多了2个
testchar = new char[newlength];
int indexOfold = oldlength - 1;
int indexOfnew = newlength - 1;
System.arraycopy(originstr.toCharArray(), 0, testchar, 0,
originstr.toCharArray().length);
System.err.println("未替换空格时的字符串");
printchar(testchar);
System.err.println("替换空格后的字符串");
while (indexOfold >= 0 && indexOfold != indexOfnew) {
if (testchar[indexOfold] == ' ') {
testchar[indexOfnew--] = '0';
testchar[indexOfnew--] = '2';
testchar[indexOfnew--] = '%';
} else {
testchar[indexOfnew--] = testchar[indexOfold];
}
indexOfold--;
}
} else {
return null;
}
return testchar;

}

public static int getBlackCount(String str) {

int count = 0;
for (int i = 0; i < str.length(); i++) {
String teststr = String.valueOf(str.charAt(i));
if (teststr.equals(" ")) {
count++;
}
}
return count;
}

public static void printchar(char[] testchar) {

for (int i = 0; i < testchar.length; i++) {

System.err.print(testchar[i]);
}
System.err.println();

}
}


当初我是从前往后弄得,时间复杂度为O(n的平方),看了后面的时间复杂度为O(n)的解法,算法的优化无非就是时间复杂度和空间复杂度两个方向考虑,或者取舍平衡。从前往后,遇到空格,用”%”将空格替换,之后移动后面的字符,将”2”放入,再移动后面所有的字符串,将”0”放入,再移动后面所有的字符串。从后往钱就不会出现这种现象,一次成型。注意做之前要考虑清楚这个数据后边是否有足够的空间,是在原数组处理还是额外的数上处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐