● 344.反转字符串
class Solution {
public void reverseString(char[] s) {
if (s.length == 0) return;
int lo = 0, hi = s.length - 1;
while (lo <= hi){
char tmp = s[lo];
s[lo] = s[hi];
s[hi] = tmp;
lo ++;
hi --;
}
}
}
● 541. 反转字符串II
class Solution {
public String reverseStr(String s, int k) {
int n = s.length();
char[] arr = s.toCharArray();
for (int i = 0; i < n; i += 2 * k) {
reverse(arr, i, Math.min(i + k, n) - 1);
}
return new String(arr);
}
public void reverse(char[] arr, int left, int right) {
while (left < right) {
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
}
● 151.翻转字符串里的单词
class Solution {
public String reverseWords(String s) {
StringBuilder sb = new StringBuilder();
// 先清洗一下数据,把多于的空格都删掉
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
if (c != ' ') {
// 单词中的字母/数字
sb.append(c);
} else if (!sb.isEmpty() && sb.charAt(sb.length() - 1) != ' ') {
// 单词之间保留一个空格
sb.append(' ');
}
}
// 末尾如果有空格,清除之
if (sb.charAt(sb.length() - 1) == ' ') {
sb.deleteCharAt(sb.length() - 1);
}
// 清洗之后的字符串
char[] chars = sb.toString().toCharArray();
int n = chars.length;
// 进行单词的翻转,先整体翻转
reverse(chars, 0, n - 1);
// 再把每个单词翻转
for (int i = 0; i < n; ) {
for (int j = i; j < n; j++) {
if (j + 1 == n || chars[j + 1] == ' ') {
// chars[i..j] 是一个单词,翻转之
reverse(chars, i, j);
// 把 i 置为下一个单词的首字母
i = j + 2;
break;
}
}
}
// 最后得到题目想要的结果
return new String(chars);
}
// 翻转 arr[i..j]
void reverse(char[] arr, int i, int j) {
while (i < j) {
char temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
}
● 剑指Offer 05.替换空格
class Solution {
public String replaceSpace(String s) {
// int length = s.length();
// if (length == 0) return s;
StringBuilder resStringBuilder = new StringBuilder();
// StringBuilder buchong = new StringBuilder("%20");
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
if (chars[i] != ' '){
resStringBuilder.append(chars[i]);
}else {
resStringBuilder.append("%20");
}
}
return resStringBuilder.toString();
}
}
● 剑指Offer58-II.左旋转字符串
class Solution {
public String reverseLeftWords(String s, int n) {
StringBuilder res = new StringBuilder();
// StringBuilder prev = new StringBuilder();
if (n <= 0 || n >= s.length()) return s;
char[] chars = s.toCharArray();
for (int i = n; i < chars.length; i++) {
res.append(chars[i]);
}
for (int i = 0; i < chars.length; i++) {
res.append(chars[i]);
if ((i + 1) == n){
break;
}
}
return res.toString();
}
}