● 344.反转字符串
● 541. 反转字符串II
● 剑指Offer 05.替换空格
● 151.翻转字符串里的单词
● 剑指Offer58-II.左旋转字符串
344.反转字符串
链接:LeetCode 344
思路:自己实现一下字符串翻转
class Solution {
public void reverseString(char[] s) {
int l = 0;
int r = s.length - 1;
while(l < r) {
char temp = s[l];
s[l] = s[r];
s[r] = temp;
l++;
r--;
}
}
}
541. 反转字符串II
链接:LeetCode 541
思路:合理利用 for 循环
class Solution {
public String reverseStr(String s, int k) {
char[] chars = s.toCharArray();
int i = 0;
for(; i < s.length(); i += 2*k) {
int left = i;
int right = Math.min(i + k - 1, s.length() - 1);
while (left < right) {
swap(left, right, chars);
left++;
right--;
}
}
return String.valueOf(chars);
}
public void swap(int a, int b, char[] chars) {
char temp = chars[a];
chars[a] = chars[b];
chars[b] = temp;
}
}
剑指Offer 05.替换空格
链接:剑指Offer 05](https://leetcode.cn/problems/ti-huan-kong-ge-lcof/)
思路:双指针
class Solution {
public String replaceSpace(String s) {
int len = s.length();
for(int i=0; i<len; i++) {
if (s.charAt(i) == ' ') {
s = s + ' ' + ' ';
}
}
char[] chars = s.toCharArray();
int newLen = s.length();
int left = len - 1;
int right = newLen - 1;
while(left < right) {
if(chars[left] == ' ') {
chars[right--] = '0';
chars[right--] = '2';
chars[right] = '%';
} else {
chars[right] = chars[left];
}
right--;
left--;
}
return new String(chars);
}
}
151.翻转字符串里的单词
链接:LeetCode 151
思路:局部和整体
class Solution {
public String reverseWords(String s) {
StringBuilder sb = new StringBuilder(s);
int left = 0;
while(sb.charAt(left) == ' ') {
sb.deleteCharAt(left);
}
int right = sb.length() - 1;
while(sb.charAt(right) == ' ') {
sb.deleteCharAt(right--);
}
for (int i = 0; i < sb.length(); i++) {
if(i > 0 && sb.charAt(i) == ' ' && sb.charAt(i - 1) == ' ') {
sb.deleteCharAt(i);
}
}
StringBuilder s2 = new StringBuilder();
String[] s1 = sb.toString().split(" ");
for (int i = s1.length - 1; i >= 0; i--) {
if (s1[i].length() >0) {
s2.append(s1[i]);
if (i != 0) {
s2.append(" ");
}
}
}
return s2.toString();
}
}
剑指Offer58-II.左旋转字符串
链接:剑指Offer58-II
思路:通过局部和整体的变换达到左旋的效果
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuffer sb = new StringBuffer(s);
char[] chars = s.toCharArray();
reverse(0, n - 1, chars);
reverse(n, s.length() - 1, chars);
reverse(0, s.length() - 1, chars);
return new String(chars);
}
private void reverse(int left, int right, char[] chars) {
while (left < right) {
swap(left, right, chars);
left++;
right--;
}
}
private void swap(int a, int b, char[] chars) {
char temp = chars[a];
chars[a] = chars[b];
chars[b] = temp;
}
}