力扣
1. 遍历交换
2. 利用双指针(l,r)
1. 位运算法用于交换
class Solution {
public void reverseString(char[] s) {
int l = 0;
int r = s.length-1;
while(l
力扣
1.题意:每隔前2k个字符,反转k个;当只剩不够k个时全部反转。
1. 把String转换成char[]:利用toCharArray()方法。
1. int end = Math.min(ch.length-1,start+k-1); 的写法【用来判断尾数够不够k个】
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0; i < ch.length; i += 2*k){
int start = i;
int end = Math.min(ch.length-1,start+k-1);
while(start
力扣
1. 扩充数组到每个空格替换成"%20"之后的大小。
2. 利用双指针法,i指向新长度的末尾,j指向旧长度的末尾,从后向前替换空格。【若从前先后填充,每次添加元素,都要将添加元素之后的所有元素向后移动。】
1. 扩充String:利用 StringBuilder 和 append() 方法。
class Solution {
public String replaceSpace(String s) {
if(s==null ||s.length()==0){
return s;
}
StringBuilder str = new StringBuilder();
for(int i = 0; i=0){
if(ch[l]==' '){
ch[r--]='0';
ch[r--]='2';
ch[r--]='%';
l--;
} else{
ch[r--]=ch[l--];
}
}
return new String(ch);
}
}
力扣
1. 移除首尾及中间多余空格;【双指针法】
2. 将整个字符串反转;
3. 将每个单词反转。
class Solution {
public String reverseWords(String s) {
char[] ch = s.toCharArray();
ch = removeExtraSpaces(ch);
reverse(ch, 0, ch.length - 1);
reverseEachWord(ch);
return new String(ch);
}
//1.【快慢指针】去除多余空格
public char[] removeExtraSpaces(char[] ch) {
int slow = 0;
for (int fast = 0; fast < ch.length; fast++) {
if (ch[fast] != ' ') {
if (slow != 0){
ch[slow++] = ' ';
}
while (fast < ch.length && ch[fast] != ' '){
ch[slow++] = ch[fast++];
}
}
}
char[] newChars = new char[slow];
System.arraycopy(ch, 0, newChars, 0, slow);
return newChars;
}
//2.【双指针】反转字符串
public void reverse(char[] ch, int l, int r) {
if (r >= ch.length) {
System.out.println("set a wrong right");
return;
}
while (l < r) {
ch[l] ^= ch[r];
ch[r] ^= ch[l];
ch[l] ^= ch[r];
l++;
r--;
}
}
//3.反转单词
public void reverseEachWord(char[] ch) {
int start = 0;
for (int end = 0; end <= ch.length; end++) {
if (end == ch.length || ch[end] == ' ') {
reverse(ch, start, end - 1);
start = end + 1;
}
}
}
}
力扣
【局部反转+整体反转】
1. 反转整个字符串;
2. 反转下标为0~n-1的部分;
3. 反转剩下部分。
class Solution {
public String reverseLeftWords(String s, int n) {
char[] ch = s.toCharArray();
reverse(ch,0,ch.length-1);
reverse(ch,0,ch.length-1-n);
reverse(ch,ch.length-n,ch.length-1);
return new String(ch);
}
private char[] reverse(char[] ch, int l, int r){
while(l