跟着carl的资源刷的,今天开始字符串部分
【344】反转字符串
题解
class Solution {
public void reverseString(char[] s) {
int left = 0;
int right = s.length - 1;
while(left < right){
char temp ;
temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
}
方法二(这个方法在一开始的时候还写错了。。。i < length/2 ,我一开始写的<= ...)
class Solution {
public void reverseString(char[] s) {
int length = s.length;
for(int i = 0;i < length/2;i++){
char temp = s[i];
s[i] = s[length - i - 1];
s[length - i - 1] = temp;
}
}
}
【541】反转字符串II
模拟思路写就可以,注意合并剩下k - 2k 和 大于 2k的,本质上都是反转index往后的k长度的字符串
String 和 char[] 的互相转换:
1.String ---> char[]
String s = "asfgrtertrh";
char[] arr = s.toCharArray();
2.char[] ---> String
String r = new String(arr);
class Solution {
public String reverseStr(String s, int k) {
String r = "";
char[] arr = s.toCharArray();
int length = s.length();
int index = 0;
while(index < length){
if(index <= length - k){
int left = index;
int right = index + k - 1;
while(left < right){
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
if(index <= length - 2*k){
index += 2*k;
}else{
break;
}
}else{
int left = index;
int right = length - 1;
while(left < right){
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
break;
}
}
r = new String(arr);
return r;
}
}
【剑指Offer 05 替换空格】
1.先构造一个新的匹配扩充后长度的数组
2.从后往前填这个数组
从前向后的话会陷入一个重复扩充数组的误区:看见一个空格就新建一个长度 +2的数组,倒不如直接新建一个扩充完所有空格长度的数组来的简单。
class Solution {
public String replaceSpace(String s) {
int length = s.length();
char[] arr = s.toCharArray();
for(int i = 0; i < s.length();i++){
if(arr[i] == ' '){
length += 2;
}
}
char[] ans = new char[length];
int i = ans.length-1;
int index = s.length() -1;
while(i >= 0){
if(arr[index] == ' '){
ans[i] = '0';
i--;
ans[i] = '2';
i--;
ans[i] = '%';
i--;
index--;
}else{
ans[i] = arr[index];
i--;
index--;
}
}
String r = new String(ans);
return r;
}
}