今日字符串 part01
344.反转字符串
Leetcode链接: 反转字符串
class Solution {
public void reverseString(char[] s) {
int front = 0;
int end = s.length-1;
while(front < end){
char c = s[front];
s[front] = s[end];
s[end] = c;
front++;
end--;
}
}
}
这题感觉太简单了,和之前做过的一道题目有点像。因为要求在数组内进行操作,那就只有双指针的办法了。
541. 反转字符串 II
Leetcode链接: 反转字符串 II
class Solution {
public String reverseStr(String s, int k) {
char[] array = s.toCharArray();
boolean skip = false;
for(int i = 0; i < array.length; i += k){
if(skip){
skip = !skip;
continue;
}
skip = !skip;
int front = i;
int end = Math.min((i+k-1),(array.length-1));
while(front < end){
char c = array[front];
array[front] = array[end];
array[end] = c;
front ++;
end--;
}
}
return new String(array);
}
}
这题的题目理解有点问题,后面还是看了解释才看懂这题是什么意思,通俗的讲就是从0开始,反转前k个,然后再跳过k个,再反转k个,以此循环,最后结尾时如果需要翻就可能出现不足k个数,就全反转。这一题和上一题是一样的,只是外面多个for循环,看了一下答案之后对代码进行了优化,把skip这个优化掉了。
class Solution {
public String reverseStr(String s, int k) {
char[] array = s.toCharArray();
for(int i = 0; i < array.length; i += (2*k)){
int front = i;
int end = Math.min((i+k-1),(array.length-1));
while(front < end){
char c = array[front];
array[front] = array[end];
array[end] = c;
front ++;
end--;
}
}
return new String(array);
}
}
54. 替换数字
题目链接: 替换数字
将字符串中的字母字符保持不变,而将每个数字字符替换为number。
例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。
这题我没写,思考了一下思路。
今日收获
在刷题中String也是比较难的一种题目,有点像array,但是有时候又没有array那么便利,很多时候需要让String变成char array来进行操作。