344.反转字符串
题目链接
https://leetcode.cn/problems/reverse-string/description/
题目描述
思路
1、使用双指针
第一想法就是使用双指针,一个在数组开头,一个在数组结尾,交换两个位置的字母,然后两个指针向中间移动
public void reverseString(char[] s) {
//使用双指针
int left=0,right=s.length-1;
while (left<right){
char temp=s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
return;
}
2、同样使用双指针
只不过在进行交换的时候有所不同
对于异或操作可以进行交换的解释参考
异或操作交换数值
public void reverseString(char[] s) {
int l = 0;
int r = s.length - 1;
while (l < r) {
s[l] ^= s[r]; //构造 a ^ b 的结果,并放在 a 中
s[r] ^= s[l]; //将 a ^ b 这一结果再 ^ b ,存入b中,此时 b = a, a = a ^ b
s[l] ^= s[r]; //a ^ b 的结果再 ^ a ,存入 a 中,此时 b = a, a = b 完成交换
l++;
r--;
}
}
541. 反转字符串II
题目链接
https://leetcode.cn/problems/reverse-string-ii/description/
题目描述
思路
1、直接按照规则
在这里花费了很长时间,但还是没有做出来,需要注意的点太多了,花了三个小时终于做出来了!!
总体上将情况分为两种:k>ch.length
k<=ch.length
第一种情况直接将字符串反转即可
第二种情况需要将循环每 2*k 移动一次,移动一次之后,需要判断剩下的是否够 k 个
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
if(k>ch.length){
int i=0,j=ch.length-1;
while (i<j){
char temp=ch[i];
ch[i]=ch[j];
ch[j]=temp;
i++;
j--;
}
}else {
for (int i = 0; i < ch.length; ) {
int left=i,right=k-1;
while (left<right){
char temp=ch[left];
ch[left]=ch[right];
ch[right]=temp;
left++;
right--;
}
i+=2*k;
if(ch.length-i<k) {
int m = i, n = ch.length - 1;
while (m