344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


344.反转字符串

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_算法


这道题双指针太简单了,没什么好说的。

class Solution {
public void reverseString(char[] s) {
int i = 0;
int j = s.length - 1;
while(i <= j){
char temp = s[i];
s[i] = s[j];
s[j] = temp;
i++;
j--;
}
}
}

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_算法_02

541. 反转字符串II

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_算法_03


这道题做的时候思路混乱,现在弄清了。

由于所有字符在计算机层都是使用二进制表示, 对于"变量"仍可以用上位运算.在掌握异或运算符的概念和运算意义之后, 就可以写出来了.

我们使用异或的方式来交换字符串。

class Solution {
public String reverseStr(String s, int k) {

int i = 0;

char[] ch = s.toCharArray();
for(; i < ch.length; i += 2 * k){
int start = i;
//这里是判断尾数够不够k个来取决end指针的位置
int end = Math.min(ch.length - 1, start + k - 1);
//用异或运算反转
while(start < end){
ch[start] ^= ch[end];
ch[end] ^= ch[start];
ch[start] ^= ch[end];
start++;
end--;
}
}
return new String(ch);
}
}

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_i++_04

剑指Offer 05.替换空格

这题太简单,没啥可说的。

class Solution {
public String replaceSpace(String s) {
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();
}
}

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_leetcode_05

151.翻转字符串里的单词

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_字符串_06

class Solution {
public String reverseWords(String s) {
String[] st = s.trim().split(" ");
StringBuilder sb = new StringBuilder();
for(int i = st.length - 1;i >= 0;i--){
if(st[i] == "") continue;
if(i == 0){
sb.append(st[i]);
}else{
sb.append(st[i]);
sb.append(" ");
}
}
return sb.toString();
}
}

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_算法_07

剑指Offer58-II.左旋转字符串

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_c++_08


该题思路有意思,进行局部反转,之后再全部反转得到目标值。

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_c++_09

class Solution {
public String reverseLeftWords(String s, int n) {
char[] ch = s.toCharArray();
reverse(ch,0,n - 1);
reverse(ch,n,s.length() - 1);
reverse(ch,0,s.length() - 1);
return new String(ch);
}
public void reverse(char[] ch,int i, int j){
while(i < j){
ch[i] ^= ch[j];
ch[j] ^= ch[i];
ch[i] ^= ch[j];
i++;
j--;
}
}
}

344.反转字符串 541. 反转字符串II 剑指Offer 05.替换空格 151.翻转字符串里的单词 剑指Offer58-II.左旋转字符串_i++_10


阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6