面试之路(20)-字符串中空格替换一类问题详解
2016-05-03 17:00
471 查看
题目描述
实现一个函数,把字符串中的空格替换为%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整理写成,有部分不同,有待确认。
相关文章推荐
- 剑指Offer 面试题45:圆圈中最后剩下的数字(约瑟夫环问题,ZOJ 1088:System Overload类似)题解
- Java面试问题
- web前端面试题及答案 html篇 下
- 11个提问频率最高的PHP面试题
- Web程序员最常用的11款PHP框架
- 剑指Offer 面试题12:打印1到最大的N位数 题解
- 程序员的十个层次,你属于哪一层?(转)
- java面试常遇到的(2)
- 职业规划2
- 程序员的hello world
- 一个合格的程序员应该读过哪些书
- 奋斗吧,程序员——第二十四章 想佳人、妆楼凝望,误几回、天际识归舟
- 关于ArrayList的5道面试题
- 剑指offer-面试题36-数组中的逆序对(O(n)复杂度)
- 职场黑话
- 程序员要注意的细节
- leetcode 8: String to Integer (myAtoi,C库函数atoi模拟) (剑指offer 面试题49) 解题报告
- 面试杂谈
- 程序员的开始
- 如何做成牛x,简历吸引人,月薪3万,程序员的品牌