剑指offer02
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer02相关的知识,希望对你有一定的参考价值。
package jianzhiOffer; /* * 请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy. * 则经过替换之后的字符串为We%20Are%20Happy。 */ public class ch02 { public static void main(String[] args) { // String str = "We Are Happy"; // String newStr = myReplace("%20", " ", str); // System.out.println(newStr); StringBuffer sb = new StringBuffer("We Are Happy"); String str = replace(sb); System.out.println(str); } /* * myReplace()方法使用java中提供的api replace() */ public static String myReplace(String newStr,String oldStr,String str) { return str.replace(oldStr, newStr); } /* * 不考虑java提供的api * 我们可以从前往后替换,也可以从后往前替换,建议使用后者, * 因为从前往后替换比从后往前替换,字符的移动次数要多很多, * 字符在替换之后,字符串长度会发生变化,因此,我们首先计算出 * 替换之后字符串的长度,然后分别在旧字符串索引上和新字符串索引上 * 进行移动,判断是否为空格,进行相应的替换 */ public static String replace(StringBuffer str) { int spacenum = 0; for (int i = 0; i < str.length(); i++) { //计算空格数量 if(str.charAt(i) == ' ') { spacenum++; } } int indexOld = str.length() - 1; //旧字符串的最后一个索引位置 int indexNew = str.length() - 1 + spacenum * 2; //新字符串的最后一个索引位置 int lengthNew = str.length() + spacenum * 2; //新字符串的长度 str.setLength(lengthNew); //将旧字符串的长度重新设置 while(indexOld >= 0) { //遍历进行替换 if(str.charAt(indexOld) == ' ') { str.setCharAt(indexNew--, '0'); str.setCharAt(indexNew--, '2'); str.setCharAt(indexNew--, '%'); indexOld--; } else { str.setCharAt(indexNew--, str.charAt(indexOld--)); } } return str.toString(); } }以上是关于剑指offer02的主要内容,如果未能解决你的问题,请参考以下文章
剑指 Offer 53 - I. 在排序数组中查找数字 I / 剑指 Offer 42. 连续子数组的最大和(线段树基础)/152. 乘积最大子数组 / 面试题 10.02. 变位词组