死磕算法系列文章
“LeetCode:https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof
“GitHub:https://github.com/nateshao/leetcode/blob/main/algo-notes/src/main/java/com/nateshao/sword_offer/topic_04_replaceSpace/Solution.java
请实现一个函数,把字符串 s
中的每个空格替换成"%20"。
输入:s = "We are happy."
输出:"We%20are%20happy."
限制:0 <= s 的长度 <= 10000
“遇到空格就在后面添加“ %20 ”
字符串都被设计成「不可变」的类型,即无法直接修改字符串的某一位字符,需要新建一个字符串实现。
算法流程:
复杂度分析:
package com.nateshao.sword_offer.topic_04_replaceSpace;
/**
* @date Created by 邵桐杰 on 2021/11/15 23:12
* @微信公众号 程序员千羽
* @个人网站 www.nateshao.cn
* @博客 https://nateshao.gitee.io
* @GitHub https://github.com/nateshao
* @Gitee https://gitee.com/nateshao
* Description: 替换空格
*/
public class Solution {
public static void main(String[] args) {
String str = "We Are Happy";
String s = replaceSpace(str);
System.out.println(s);
}
public static String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for (Character c : s.toCharArray()) {
if (c == ' ') res.append("%20");
else res.append(c);
}
return res.toString();
// if (s == null)
// return null;
// StringBuilder sb = new StringBuilder();
// for (int i = 0; i < s.length(); i++) {
// if (String.valueOf(s.charAt(i)).equals(" ")) {
// sb.append("%20");
// } else {
// sb.append(s.charAt(i));
// }
// }
// return String.valueOf(sb);
}
}
“由于每次替换从 1 个字符变成 3 个字符,使用字符数组可方便地进行替换。建立字符数组地长度为 s 的长度的 3 倍,这样可保证字符数组可以容纳所有替换后的字符。
复杂性分析
/**
* 方法二:字符数组
* @param s
* @return
*/
public String replaceSpace2(String s) {
int length = s.length();
char[] array = new char[length * 3];
int size = 0;
for (int i = 0; i < length; i++) {
char c = s.charAt(i);
if (c == ' ') {
array[size++] = '%';
array[size++] = '2';
array[size++] = '0';
} else {
array[size++] = c;
}
}
String newStr = new String(array, 0, size);
return newStr;
}
还有一种解法,这个看看就好哈哈
public String replaceSpace(String s) {
return s.replace(" ","%20");
}
参考链接:
革命尚未成功,同志仍需努力,冲冲冲