分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程大家好!欢迎来到我的网站! 人工智能被认为是一种拯救世界、终结世界的技术。毋庸置疑,人工智能时代就要来临了,科… 继续阅读 前言https://www.captainai.net/troubleshooter
package 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"替代 * 后,长度将是len+2*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 */