1.反转字符串
1.1题目信息
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O ( 1 ) O(1) O(1) 的额外空间解决这一问题。
你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。
示例 1:
输入:[“h”,“e”,“l”,“l”,“o”]
输出:[“o”,“l”,“l”,“e”,“h”]
示例 2:
输入:[“H”,“a”,“n”,“n”,“a”,“h”]
输出:[“h”,“a”,“n”,“n”,“a”,“H”]
1.2题解
class Solution {
public void reverseString(char[] s) {
int l=0;
int r=s.length-1;
while(l<r){
s[l]^=s[r];
s[r]^=s[l];
s[l]^=s[r];
l++;
r--;
}
}
}
本题使用的是swap函数进行的求解问题。
2.反转字符串 ||
2.1题目信息
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
2.2解题思路
首先,看到这道题的时候,就是将在遍历字符串的过程当中,只要让i+=(2k),i每次移动2k就行了,然后判断是否有需要反转的区间。
因为要找的也就是2*k区间的起点
2.3题解代码
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){
ch[start] ^=ch[end];
ch[end] ^=ch[start];
ch[start] ^=ch[end];
start ++;
end --;
}
}
return new String(ch);
}
}