344. 反转字符串 用双指针。
class Solution {
public void reverseString(char[] s) {
int l = 0;
int r = s.length - 1;
while(l < r){
char temp = s[l];
s[l] = s[r];
s[r] = temp;
l ++;
r --;
}
}
}
class Solution {
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0; i < s.length(); i += 2*k){
int start = i;
int end = Math.min(s.length() - 1, start + k - 1);
while(start < end){
char temp = ch[start];
ch[start] = ch[end];
ch[end] = temp;
start ++;
end --;
}
}
return new String(ch);
}
}
class Solution {
public String replaceSpace(String s) {
if(s == null){
return null;
}
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); i ++){
if(s.charAt(i) == ' '){
sb.append("%20");
} else{
sb.append(s.charAt(i));
}
}
return sb.toString();
}
}
class Solution {
/**
1. 不用Java内置方法实现
2. 去除首尾以及中间多余空格
3. 反转整个字符串
4. 反转各个单词
*/
public String reverseWords(String s) {
//1. 去除首尾以及中间多余空格
StringBuilder sb = removeSpace(s);
//2. 反转整个字符串
reverseString(sb, 0, sb.length() - 1);
//3. 反转各个单词
reverseEachWord(sb);
return sb.toString();
}
private StringBuilder removeSpace(String s){
int start = 0;
int end = s.length() - 1;
while(s.charAt(start) == ' ') start ++;
while(s.charAt(end) == ' ') end --;
StringBuilder sb = new StringBuilder();
while(start <= end){
char c = s.charAt(start);
if(c != ' ' || sb.charAt(sb.length() - 1) != ' '){
sb.append(c);
}
start ++;
}
return sb;
}
/**
反转字符串指定区间的字符
*/
public void reverseString(StringBuilder sb, int start, int end){
while(start < end){
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, temp);
start ++;
end --;
}
}
private void reverseEachWord(StringBuilder sb){
int start = 0;
int end = 1;
int n = sb.length();
while(start < n){
while(end < n && sb.charAt(end) != ' '){
end ++;
}
reverseString(sb, start, end - 1);
start = end + 1;
end = start + 1;
}
}
}
class Solution {
public String reverseLeftWords(String s, int n) {
int len = s.length();
StringBuilder sb = new StringBuilder(s);
reverseString(sb, 0, n - 1);
reverseString(sb, n, len - 1);
return sb.reverse().toString();
}
public void reverseString(StringBuilder sb, int start, int end){
while(start < end){
char temp = sb.charAt(start);
sb.setCharAt(start, sb.charAt(end));
sb.setCharAt(end, temp);
start ++;
end --;
}
}
}