KOKO-代码随想录算法训练营Day 8 | 344|541 |151
文章目录
一、344.反转字符串
1.题目
https://leetcode.cn/problems/reverse-string/
2.代码
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--;
}
}
3.总结
二. 151.翻转字符串里的单词
1.题目:
https://leetcode.cn/problems/reverse-words-in-a-string/
2.代码
public String reverseWords(String s) {
//去首尾空格
int l=0;
int r=s.length()-1;
while (l<r){
while (s.charAt(l)==' '){
l++;
}
while (s.charAt(r)==' '){
r--;
}
break;
}
// 去中间空格
s=s.substring(l,r+1);
int slow=0,fast=0;
StringBuilder sb1 = new StringBuilder(s);
s=sb1.reverse().toString();
char[] arr=s.toCharArray();
StringBuilder sb=new StringBuilder();
while (fast<s.length()){
while (fast<s.length()&&s.charAt(fast)!=' '){
fast++;
}
String str= reverseArr(arr,slow,fast-1);
slow=fast+1;
sb.append(str).append(" ");
while (slow<s.length()&&s.charAt(slow)==' '){
slow++;
}
fast=slow;
}
return sb.toString().substring(0,sb.length()-1);
}
private String reverseArr(char[] arr, int slow, int fast) {
int a=slow;
int b=fast;
while (slow<fast){
char temp=arr[slow];
arr[slow]=arr[fast];
arr[fast]=temp;
slow++;
fast--;
}
return String.valueOf(arr).substring(a,b+1);
}
3.总结
三. 541. 反转字符串II
1.题目
https://leetcode.cn/problems/reverse-string-ii/
2.代码:
public String reverseStr(String s, int k) {
int l=s.length();
int sheng=l%(2*k);
char[] arr=s.toCharArray();
if(k>=l){
reverseSt(arr,0,l-1);//数组,起始下标,终止下标
return String.valueOf(arr);
}
if(sheng==l){
reverseSt(arr,0,k-1);
return String.valueOf(arr);
}
int offset=2*k;
for (int i = 0; i < l; ) {
if(i+offset>l){
if(l-i>=k){
reverseSt(arr,i,i+k-1);
return String.valueOf(arr);
}
reverseSt(arr,i,l-1);
return String.valueOf(arr);
}
reverseSt(arr,i,i+k-1);
i+=offset;
}
return String.valueOf(arr);
}
private void reverseSt(char[] arr, int i, int i1) {
while (i<i1){
char temp=arr[i];
arr[i]=arr[i1];
arr[i1]=temp;
i++;
i1--;
}
}
3.总结:
四. 剑指Offer58-II.左旋转字符串
1.题目:
https://leetcode.cn/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/
2.代码:
public String dynamicPassword(String password, int target) {
char[] arr=password.toCharArray();
int len=arr.length-1;
reverse(arr,0,len);
reverse(arr,0,len-target);
reverse(arr, len-target+1,len);
return String.valueOf(arr);
}
private void reverse(char[] arr, int i, int j) {
while (i<j){
char temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
i++;
j--;
}
}
总结
五 剑指Offer 05.替换空格
题不见了,我直接用的replace