题目:344. 反转字符串 - 力扣(LeetCode)
思路/想法:
遍历 + 双指针
代码实现:
class Solution {
public void reverseString(char[] s) {
// 遍历 + 双指针
int left = 0, right = s.length - 1;
while (left <= right) {
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
题目:541. 反转字符串 II - 力扣(LeetCode)
思路/想法:
多个转换就迷,实在不好。遍历 + 双指针(针对前k个元素),跨越步数为 2k。
代码实现:
class Solution {
public String reverseStr(String s, int k) {
char[] c = s.toCharArray();
for (int i = 0; i < c.length; i += 2 * k) {
int start = i, end = Math.min(i + k - 1, c.length - 1);
while (start <= end) {
char temp = c[start];
c[start] = c[end];
c[end] = temp;
start++;
end--;
}
}
return new String(c);
}
}
题目:LCR 122. 路径加密 - 力扣(LeetCode)
思路/想法:
使用StringBuilder来操作字符串,可变字符降低创建和销毁时的空间开销。字符串表示:"";字符表示:''
代码实现:
class Solution {
public String pathEncryption(String path) {
char[] ch = path.toCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ch.length; i++) {
if (ch[i] == '.') {
sb.append(" ");
} else {
sb.append(ch[i]);
}
}
return sb.toString();
}
}
题目:151. 反转字符串中的单词 - 力扣(LeetCode)
思路/想法:
倒序遍历 + 遇到空格就将前面遍历过的字符串进行反转,对连续空格进行跳过,对字符串首尾进行去空。
代码实现:
class Solution {
public String reverseWords(String s) {
// 倒序遍历 + 遇到空格就将前面遍历到的字符串进行反转
StringBuilder ans = new StringBuilder();
for (int i = s.length() - 1; i >= 0; i--) {
StringBuilder sb1 = new StringBuilder();
while (i >= 0 && s.charAt(i) == ' ') {
i--;
continue;
}
while (i >= 0 && s.charAt(i) != ' ') {
sb1.append(s.charAt(i));
i--;
}
sb1.reverse();
ans.append(sb1 + " ");
}
return ans.toString().trim();
}
}
题目:LCR 182. 动态口令 - 力扣(LeetCode)
思路/想法:
创建动态字符串,拆分两段分别进行遍历
代码实现:
class Solution {
public String dynamicPassword(String password, int target) {
// 创建动态字符串,进行两段遍历
StringBuilder ans = new StringBuilder();
for (int i = target; i < password.length(); i++) {
ans.append(password.charAt(i));
}
for (int i = 0; i < target; i++) {
ans.append(password.charAt(i));
}
return ans.toString();
}
}