LeetCode 344. 反转字符串
题目链接: 反转字符串题目链接
思路
这道题目让我们进行字符串的反转,其实直接使用 reverse 相关的函数就可以解决问题。但是解决问题的时候,如果这道题目使用库函数就可以直接解决,就最好不要使用库函数;如果库函数只是题目中解法的一小步,那么就使用库函数。在不使用库函数的前提下,我们设置两个指针,让两个指针分别从数组两边向中间走,每次执行完交换操作后执行中间走操作。
代码
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--;
}
}
}
LeetCode 541. 反转字符串Ⅱ
题目链接:反转字符串Ⅱ题目链接
思路
这道题目其实就是一道根据题意的模拟题。要求我们每次选取数组中前 2 k 个元素,并且反转 2 k 中的前 k 个元素。如果选取的数组元素的值<=k 个,则全部反转。那么反转元素的做法就跟前一道题目是一模一样的,我们在前一道题目的基础之上需要判断一下边界条件,即判断最后选取的元素的数量,也就是代码中的 end 的判断。
代码
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<end)
{
char temp=ch[start];
ch[start]=ch[end];
ch[end]=temp;
end--;
start++;
}
}
return new String(ch);
}
}
卡码网 54. 替换数字
题目链接:替换数字题目链接
思路:
这道题目给定我们一个字符串,让我们将字符串中的数字全部替换成 number 这个字符,可以发现,如果我们需要进行替换的话,我们的字符串数组将会变长。所以我们的第一步是建立一个合适长度的字符串数组,然后我们从后向前使用双指针来进行替换。为什么不从前向后替换,因为从前向后替换的话,每次还需要更改数组中替换值后面的值的位置,时间复杂度为 O( n 2 n^2 n2), 而从后向前替换则不需要,时间复杂度为 O (n)。
代码:
import java.util.*;
public class Main{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
String s=sc.next();
int len=s.length();
for(int i=0;i<s.length();i++)
{
if(s.charAt(i)>='0'&& s.charAt(i)<='9')
len+=5;
}
char[] ch=new char[len];
for(int i=0;i<s.length();i++)
{
ch[i]=s.charAt(i);
}
for(int j=len-1,i=s.length()-1;i>=0;i--)
{
if(ch[i]>='0'&&ch[i]<='9')
{
ch[j--]='r';
ch[j--]='e';
ch[j--]='b';
ch[j--]='m';
ch[j--]='u';
ch[j--]='n';
}
else
ch[j--]=ch[i];
}
System.out.println(ch);
}
}
标签:ch,题目,start,--,反转,随想录,int,字符串
From: https://blog.csdn.net/qq_51597940/article/details/143864764