344. 反转字符串
题目链接:https://leetcode.cn/problems/reverse-string/
代码
class Solution {
public void reverseString(char[] s) {
for (int i = 0; i < s.length / 2; i++) {
char temp = s[i];
s[i] = s[s.length - i - 1];
s[s.length - i - 1] = temp;
}
}
}
541. 反转字符串II
题目链接:https://leetcode.cn/problems/reverse-string-ii/
代码
class Solution {
public String reverseStr(String s, int k) {
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i += 2 * k) {
reverse(chars, i, Math.min(i + k - 1, chars.length - 1));
}
return new String(chars);
}
public void reverse(char[] chars, int start, int end) {
while (start < end) {
char temp = chars[start];
chars[start++] = chars[end];
chars[end--] = temp;
}
}
}
剑指Offer 05.替换空格
题目链接:https://leetcode.cn/problems/ti-huan-kong-ge-lcof/
代码
class Solution {
public String replaceSpace(String s) {
StringBuilder res = new StringBuilder();
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
res.append("%20");
} else {
res.append(s.charAt(i));
}
}
return new String(res);
}
}
151.翻转字符串里的单词
题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/
思路
去除两边空格后,提取出所有单词,然后翻转。时间O(n),空间O(n)
代码
class Solution {
public String reverseWords(String s) {
String[] str = s.trim().split("\s+");
Collections.reverse(Arrays.asList(str));
return String.join(" ", str);
}
}
剑指 Offer 58 - II. 左旋转字符串
题目链接:https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
思路
- 调用substring。时间O(n),空间O(n)
- 三次反转。时间O(n),空间O(n)
代码
//substring
class Solution {
public String reverseLeftWords(String s, int n) {
return s.substring(n)+s.substring(0,n);
}
}
//三次反转
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder sb = new StringBuilder(s);
reverse(sb, 0, n - 1);
reverse(sb, n, s.length() - 1);
reverse(sb, 0, s.length() - 1);
return new String(sb);
}
public void reverse(StringBuilder sb, int start, int end) {
while (start < end) {
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, temp);
start++;
end--;
}
}
}