打卡第8天
344.反转字符串
用双指针法,从两头不断收缩,java代码如下
class Solution {
public void reverseString(char[] s) {
//双指针法
for (int i = 0, j = s.length - 1; i < s.length/2; i++, j--) {
char temp = s[i];
s[i] = s[j];
s[j] = temp;
}
}
}
541. 反转字符串II
用双指针法进行反转字符串,包装成一个函数来使用,然后for循环每一次加2k,如果i+k<size就进行反转前k位,java代码如下
class Solution {
public String reverseStr(String s, int k) {
char ch[] = s.toCharArray();
int size = s.length();
for(int i=0;i<size;i+=2*k){
if(i+k<=size){
reverseString(ch,i,i+k-1);
continue;
}
reverseString(ch,i,size-1);
}
return new String(ch);
}
public void reverseString(char[] ch, int i, int j) {
for (; i < j; i++, j--) {
char temp = ch[i];
ch[i] = ch[j];
ch[j] = temp;
}
}
}
剑指 Offer 05. 替换空格
还是使用双指针,但是这题涉及到了java的string扩容
首先用创建一个StringBuilder,然后用append()方法进行扩容
然后设置一个左指针,一个右指针,如果左指针等于空格,右指针就主键放上%20,java代码如下
class Solution {
public String replaceSpace(String s) {
//先把s扩容到每个空格变成%20的长度
int size = s.length();
//为了扩容使用StringBuilder
StringBuilder str = new StringBuilder();
for(int i=0;i<size;i++){
if(s.charAt(i)==' '){
str.append(" ");
}
}
//对s进行扩容
s+=str.toString();
//设置左右指针
int left = size - 1;
int right = s.length() - 1;
//转化成chars方便操作
char[] chars = s.toCharArray();
while(left>=0){
if(chars[left]!=' '){
chars[right] = chars[left];
}
else{
chars[right]='0';
right--;
chars[right]='2';
right--;
chars[right]='%';
}
left--;
right--;
}
return new String(chars);
}
}
151.反转字符串中的单词
记录一下我的思路,但是没写完,明天再看看吧
class Solution {
public String reverseWords(String s) {
int left=0;
int right=0;
int size = s.length();
char[] chars = s.toCharArray();
char[] result = new char[size];
//去掉前导空格
while(chars[right]==' '){
right++;
}
while(right<size){
if(chars[right]!=' '){
right++;
}
else{
//去掉多余空格
while(chars[left]==' '){
left++;
}
for(;left<=right;left++){
}
left++;
right++;
}
}
return new String(result);
}
}
剑指 Offer 58 - II. 左旋转字符串
先把n之前的反转了,再把n之后的反转了,然后一起反转了即可,java代码如下
class Solution {
public String reverseLeftWords(String s, int n) {
int size=s.length();
char[] ch = s.toCharArray();
reverseString(ch,0,n-1);
reverseString(ch,n,size-1);
reverseString(ch,0,size-1);
return new String(ch);
}
public void reverseString(char[] ch, int start, int end) {
for(;start<end;start++,end--){
char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp;
}
}
}