思路讲解与算法实现 LeetCode - URL化
【摘要】
每天一道公司算法真题,讲解解题思路与各种算法实现;欢迎大家点评或者说出你的解题想法,或评论想让我讲解哪道题!
目录
题目解法一解法二上下篇
题目
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。...
每天一道公司算法真题,讲解解题思路与各种算法实现;欢迎大家点评或者说出你的解题想法,或评论想让我讲解哪道题!
题目
URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。(注:用Java实现的话,请使用字符数组实现,以便直接在数组上操作。)
示例1:
- 输入: "Mr John Smith ", 13
- 输出:“Mr%20John%20Smith”
示例2:
- 输入:" ", 5
- 输出:"%20%20%20%20%20"
说明
- 字符串长度在 [0, 500000] 范围内。
解法一
如果借助Java API来实现,那就太简单,几行代码搞定,因为题目说假设字符串尾部有足够的空间,那表明尾部可能有空字符,所以首先我们使用substring()函数截取实际的字符串,然后再通过replace函数将空格替换为%20即可。
package com.nobody;
/**
* @Description URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
* @Author Mr.nobody
* @Date 2021/4/22
* @Version 1.0
*/
public class ReplaceSpaces { public String replaceSpaces(String S, int length) { return S.substring(0, length).replace(" ", "%20"); } public static void main(String[] args) { ReplaceSpaces replaceSpaces = new ReplaceSpaces(); String s = "chen pi de Java Lib "; int length = s.trim().length(); System.out.println(replaceSpaces.replaceSpaces(s, length)); }
}
// 输出
chen%20pi%20de%20Java%20Lib
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
解法二
但是题目如果用Java实现的话,使用字符数组实现,而且也假设字符串尾部有足够的空间存放新增的字符,那我们可以借助原有足够的字符数组,从最尾部空间的位置往前存放每一个字符,如果是空格字符则存放%20这三个字符,否则存放原字符。最后截取尾部有效的字符数组即可。
package com.nobody;
/**
* @Description URL化。编写一种方法,将字符串中的空格全部替换为%20。假定该字符串尾部有足够的空间存放新增字符,并且知道字符串的“真实”长度。
* @Author Mr.nobody
* @Date 2021/4/22
* @Version 1.0
*/
public class ReplaceSpaces { public String replaceSpaces(String S, int length) { // 将字符串转换为字符数组 char[] chars = S.toCharArray(); // 填充游标,从字符数组的末尾开始往前填充 int fillIndex = chars.length - 1; for (int i = length - 1; i >= 0; i--) { if (' ' == chars[i]) { chars[fillIndex--] = '0'; chars[fillIndex--] = '2'; chars[fillIndex--] = '%'; } else { chars[fillIndex--] = chars[i]; } } // 截取最后有效的字符数组返回 return new String(chars, fillIndex + 1, chars.length - 1 - fillIndex); } public static void main(String[] args) { ReplaceSpaces replaceSpaces = new ReplaceSpaces(); String s = "chen pi de Java Lib "; int length = s.trim().length(); System.out.println(replaceSpaces.replaceSpaces(s, length)); }
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
上下篇
上一篇:思路讲解与算法实现 LeetCode - 判定是否互为字符重排
下一篇:敬请期待
文章来源: javalib.blog.csdn.net,作者:陈皮的JavaLib,版权归原作者所有,如需转载,请联系作者。
原文链接:javalib.blog.csdn.net/article/details/116035073
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)