您的位置:首页 > 职场人生

面试之路(20)-字符串中空格替换一类问题详解

2016-11-09 00:00 204 查看

题目描述

实现一个函数,把字符串中的空格替换为%20,例如“we are happy”,转换为“we%20are%20happy”

思路分析:

遍历的方法,时间复杂度是n×n

采用双指针,从后往前复制数组,遍历统计空格,每增加一个空格,数组长度增加2,设置联两个指针p1,p2,p1指向旧数组的末尾,p2指向新数组的末尾,根据末尾是否是空格分类复制

代码:

public void replaceBlank(char string[],int length){
if(string == null || length <= 0){
return;
}
//保存字符串的实际长度
int originLength = 0;
int numberOfBlank = 0;
int i  = 0;
while(string[i] != '\0'){
++originLength;
if(string[i] == ' '){
++numberOfBlank;
}
i++;
}
int newLength = originLength + numberOfBlank*2;
//在剑指offer中,此处是newLength > length,我感觉是它错了,欢迎指正
if(newLength + 1 > length){
return;
}
int indexOld = originLength;
int indexNew = newLength;
//剑指offer中这里是>,我是>=
while(indexOld > 0 || indexNew >= indexOld){
if(string[indexOld] == ' '){
string[indexNew--] = '0';
string[indexNew--] = '2';
string[indexNew--] = '%';
}else{
string[indexNew--] = string[indexOld];
}
indexOld--;
}
}

测试用例

输入空格在最前,最后,中间,连续

不含空格

字符串是null,内容是空,只保含空格

相似问题:

两个已经排序数组a1,a2,假设a1的空间足够大,a2插入a1

总结:

合并或者插入数组或者字符串,从后往前,采用双指针
本文是看完剑指offer整理写成,有部分不同,有待确认。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: