剑指Offer(第二版)面试题5:替换空格
来源:互联网 发布:历史通俗演义软件下载 编辑:程序博客网 时间:2024/06/07 23:34
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/71478310冷血之心的博客)
题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.”
这个题目我们可以用API中的replace()搞定,但是让自己写个算法实现呢?
方法:通过设立两个指针,建立一个辅助数组。从后往前或者从前往后移动指针。
/* * 剑指Offer面试题5:替换空格 * 题目:请实现一个函数,把字符串中的每个空格替换成“%20”。例如,输入“We are happy.”,则输出“We%20are%20happy.” */public class Test {public static void main(String[] args) {//String string ="cj ns";//String string ="cj ns ";//String string =" cj ns";//String string =null;String string =" ";System.out.println(replaceBlank(string));}/** * 思路:再建立一个辅助数组,从前往后或者从后往前遍历原字符串,同时移动两个指针 * 时间复杂度是O(n) * 空间复杂度也是O(n) * @param arr * @return */private static String replaceBlank(String string) {if(string==null)return null;int originLength = string.length();int numOfBlank = 0; // 记录空格数char[] charArray = string.toCharArray();for (int i = 0; i < charArray.length; i++) {if(charArray[i]==' ')numOfBlank++;}int newLength = originLength+numOfBlank*2; // 替换后的字符串长度char[] newcharArray = new char[newLength];// 分别设置两指针// 以下是指针从前往后移动int indexOfOriginal = 0;int indexOfNew = 0;while(indexOfOriginal<originLength){if(charArray[indexOfOriginal]==' '){newcharArray[indexOfNew++] = '%';newcharArray[indexOfNew++] = '2';newcharArray[indexOfNew++] = '0';indexOfOriginal++;}else {newcharArray[indexOfNew++] = charArray[indexOfOriginal++];}}// 以下是指针从后往前移动/*int indexOfOriginal = originLength-1;int indexOfNew = newLength-1;while(indexOfOriginal>=0&&indexOfOriginal<indexOfNew){if(charArray[indexOfOriginal]==' '){newcharArray[indexOfNew--] = '0';newcharArray[indexOfNew--] = '2';newcharArray[indexOfNew--] = '%';indexOfOriginal--;}else {newcharArray[indexOfNew--] = charArray[indexOfOriginal--];}}*/return String.valueOf(newcharArray);}}
举一反三:合并有序数组
LeetCode第88题,链接:https://leetcode.com/problems/merge-sorted-array/#/description
Given two sorted integer arrays nums1 and nums2, merge nums2 into nums1 as one sorted array.
Note:
You may assume that nums1 has enough space (size that is greater or equal to m + n) to hold additional elements from nums2. The number of elements initialized in nums1 and nums2 are m and n respectively.
该题不允许建立辅助数组,即不可以另外开辟空间。通过设置指向两个数组尾部的两个指针,并且进行元素大小的比较,减少了移动次数,时间复杂度为O(N)
public class Main { public static void main(String[] args) { int[] a= {1,2,4,0,0}; int[] b = {2,3}; merge(a, 3, b, 2); for (int i : a) { System.out.println(i); } } public static void merge(int[] nums1, int m, int[] nums2, int n) { int i = m - 1, j = n - 1, k = m + n - 1; // 遍历数组,从后边开始,j>=0说明较短的数组中至少有一个元素 while(j >= 0){ if(i >= 0 && nums1[i] > nums2[j]) nums1[k --] = nums1[i --]; else nums1[k --] = nums2[j --]; } }}
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
5 1
- 剑指Offer(第二版)面试题5:替换空格
- 剑指offer--面试题5:替换空格
- 【剑指offer】面试题 5:替换空格
- 【剑指offer】面试题5:替换空格
- 剑指offer 面试题5: 替换空格
- 剑指Offer面试题4(Java版),替换空格
- 剑指Offer面试题4(Java版):替换空格
- 剑指offer-->面试题4 替换空格
- 《剑指offer》面试题4 替换空格
- 【剑指offer】面试题4:替换空格
- 【剑指offer】面试题4替换空格
- 剑指offer 面试题4 替换空格
- 剑指Offer:面试题4 替换空格
- 剑指offer-面试题4-替换空格
- 《剑指Offer》面试题4:替换空格
- 【剑指offer】 面试题4: 替换空格
- 剑指offer 面试题4---替换空格
- 剑指offer面试题4-- 替换空格
- 自己使用的一个.NET轻量开发结构
- mysql数据库还原数据报Lost connection to MySQL server during query
- react中给dom元素添加自定义属性(Unknown prop `_type` on <Bu> tag)
- 多线程入门理解
- JS制作计算器上
- 剑指Offer(第二版)面试题5:替换空格
- 获取当前日期前一天
- LintCode 解题记录 17.5.8 (tag:二叉树)
- java中的反射机制基础概念及其代码演示
- vue.js 配置webpack-dev-server 的错误解决方法
- Dagger2
- 找不到头文件:eg:identifier "EXTI_InitTypeDef"
- mina实现长连接 推送
- linux下oracle常用操作以及linux基本操作