题目链接:344. 反转字符串 - 力扣(LeetCode)
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 - 1 - i];
s[s.length - 1 - i] = temp;
}
return;
}
}
很基础的一道题,重点是循环数组的一半就可以了
题目链接:541. 反转字符串 II - 力扣(LeetCode)
class Solution {
public String reverseStr(String s, int k) {
char[] strArr = s.toCharArray();
for(int i = 0; i < strArr.length; i = i + 2*k){
if(i + k <= strArr.length){
reverse(strArr, i, i + k);
continue;
}
reverse(strArr, i, strArr.length);
}
return String.valueOf(strArr);
}
public void reverse(char[] s, int start, int end){
for(int i = start; i < (i + end)/2; i++){
char temp = s[i];
s[i] = s[end - 1];
s[end - 1] = temp;
end --;
}
}
}
主要在于i循环时的增量以及传参数时边界的判定
题目链接:替换空格_牛客题霸_牛客网 (nowcoder.com)
public class Solution {
public String replaceSpace (String s) {
if(s == null || s.length() == 0){
return s;
}
StringBuilder str = new StringBuilder();
for(int i = 0; i < s.length(); i ++){
if(s.charAt(i) == ' '){
str.append("%20");
}else{
str.append(s.charAt(i));
}
}
return str.toString();
}
}
一种直接创建一个StringBuilder对象,正向遍历,另外一种方法是先算出总共的空格数量,然后扩充数组,再进行倒着双指针遍历填入"%20"
题目链接:左旋转字符串_牛客题霸_牛客网 (nowcoder.com)
public class Solution {
public String LeftRotateString (String str, int n) {
if(str == null || str.length() == 0){
return str;
}
if(str.length() <= n){
if(n % str.length() == 0){
return str;
}else{
StringBuilder sb = new StringBuilder();
for(int i = n % str.length(); i < str.length(); i ++){
sb.append(str.charAt(i));
}
for(int j = 0; j < n % str.length(); j ++){
sb.append(str.charAt(j));
}
return sb.toString();
}
}else{
StringBuilder sb = new StringBuilder();
for(int i = n; i < str.length(); i ++){
sb.append(str.charAt(i));
}
for(int j = 0; j < n; j ++){
sb.append(str.charAt(j));
}
return sb.toString();
}
}
}
更简单的方法是先翻转n前面的字符串,再翻转n后面的字符串,最后再把整个字符串翻转