【简单】字符串的调整与替换-Java:原问题
分享一个大牛的人工智能教程。零基础通俗易懂风趣幽默希望你也加入到人工智能的队伍中来请轻击人工智能教程大家好欢迎来到我的网站 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑人工智能时代就要来临了科… 继续阅读 前言https://www.captainai.net/troubleshooterpackage live.every.day.ProgrammingDesign.CodingInterviewGuide.String; /** * 字符串的调整与替换 * * 【题目】 * 给定一个字符类型的数组chas[]chas右半区全是空字符左半区不含有空字符。现在想将左半区中所有的空格字符替换成%20 * 假设chas右半区足够大可以满足替换所需要的空间请完成替换函数。 * * 【要求】 * 替换函数的时间复杂度为O(N)额外空间复杂度为O(1)。 * * 【补充题目】 * 给定一个字符类型的数组chas[]其中只含有数字字符和*字符。现在想把所有的*字符挪到chas的左边数宇字符挪到chas的 * 右边。请完成调整函数。 * * 【要求】 * 1.调整函数的时间复杂度为O(N)额外空间复杂度为O(1)。 * 2.不得改变数字字符从左到右出现的顺序。 * * 【难度】 * 简单 * * 【解答】 * 原问题。 * 遍历一遍可以得到两个信息chas的左半区有多大记为len左半区的空格数有多少记为num那么可知空格字符被%20替代 * 后长度将是len2*num。接下来从左半区的最后一个字符开始倒着遍历同时将字符复制到新长度最后的位置并依次向左倒着复 * 制。遇到空格字符就依次把0、2和%进行复制。这样就可以得到替换后的chas数组。 * 具体过程请参看如下代码中的replace方法。 * * author Created by LiveEveryDay */ public class StringAdjustmentAndReplacement1 { public static void replace(char[] a) { if (a null || a.length 0) { return; } int num 0; int len 0; for (len 0; len a.length a[len] ! 0; len) { if (a[len] ) { num; } } int j len num * 2 - 1; for (int i len - 1; i -1; i--) { if (a[i] ! ) { a[j--] a[i]; } else { a[j--] 0; a[j--] 2; a[j--] %; } } } public static void main(String[] args) { char[] a new char[16]; a[0] a; a[1] ; a[2] b; a[3] ; a[4] ; a[5] c; replace(a); System.out.printf(The replaced character array is: %s, new String(a)); } } // ------ Output ------ /* The replaced character array is: a%20b%20%20c */