LeetCode 344.反转字符串
题目链接:力扣
思路: 首尾双指针遍历交换
代码:
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while (left <= right) {
swap(s, left, right);
left++;
right--;
}
}
public void swap(char[] s, int left, int right) {
char tmp = s[left];
s[left] = s[right];
s[right] = tmp;
}
}
LeetCode 541. 反转字符串II
题目链接:力扣
思路: 这道题虽然是简单题,但我却不会。按照题目要求去写,代码又臭又长,整体思路上先按照答案的思路走一遍,留个印象后边再二刷。
代码:
class Solution {
public String reverseStr(String s, int k) {
StringBuilder res = new StringBuilder();
int length = s.length();
int start = 0;
while (start < length) {
StringBuilder temp = new StringBuilder();
int firstK = (start + k > length) ? length : start + k;
int secondK = (start + (2 * k) > length) ? length : start + (2 * k);
temp.append(s.substring(start, firstK));
res.append(temp.reverse());
if (firstK < secondK) {
res.append(s.substring(firstK, secondK));
}
start += (2 * k);
}
return res.toString();
}
}
剑指Offer 05.替换空格
题目链接:力扣
思路:直接按照题目要求遍历替换即可。感觉有时候这题目难度忽上忽下,跟题目难度标签出入有点大啊。
代码:
class Solution {
public String replaceSpace(String s) {
if (s == "") {
return s;
}
StringBuilder sb = new StringBuilder();
for (char ch: s.toCharArray()) {
if (ch == ' ') {
sb.append("%20");
} else {
sb.append(ch);
}
}
return sb.toString();
}
}
LeetCode 151.翻转字符串里的单词
题目链接:力扣
思路: 利用Java内置API完成链接处理步骤解决问题。(这不是这道题的有意义解法)
class Solution {
public String reverseWords(String s) {
s= s.trim();
List<String> stringList = Arrays.asList(s.split("\\s+"));
Collections.reverse(stringList);
return String.join(" ", stringList);
}
}
LeetCode 剑指Offer58-II.左旋转字符串
题目链接:力扣
思路:这道题用了一个比较讨巧的思路,也就是复制连接目标字符串,然后subString从K到目标字符串长度的新字符串,得到结果。
代码:
class Solution {
public String reverseLeftWords(String s, int n) {
return (s + s).substring(n, n + s.length());
}
}