344.反转字符串
题目很简单,直接头尾交换,逐步向中间靠拢即可。
class Solution {
public void reverseString(char[] s) {
if(s.length <= 1){
return;
}
for(int i =0;i < s.length / 2;i++){
char temp = s[i];
s[i] = s[s.length-1-i];
s[s.length - 1-i] = temp;
}
return;
}
}
随想录讲解
文章链接 根据随想录讲解,这个方法本质是一种双指针。对于字符串,我们定义两个指针(也可以说是索引下标),一个从字符串前面,一个从字符串后面,两个指针同时向中间移动,并交换元素。
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--;
}
}
}
541. 反转字符串II
题目链接 文章链接 这道题我卡住的原因是题目一直没有理解,逻辑一直和例子对不上。经过随想录的讲解和二次理解,最后写出答案。
class Solution {
public String reverseStr(String s, int k) {
int left = 0;
int right = k-1;
char[] c = s.toCharArray();
for(int i=0;i < s.length();i += (2*k)){
if(i + k < s.length()){
left = i;
right = left + k -1;
while(left < right){
char temp = c[left];
c[left] = c[right];
c[right] = temp;
left++;
right--;
}
}else{
left = i;
right = s.length() - 1;
while(left < right){
char temp = c[left];
c[left] = c[right];
c[right] = temp;
left++;
right--;
}
}
}
return String.valueOf(c);
}
}
卡码网:54.替换数字
这道题不是很难,主要是需要扩充空间,因此需要先得到需要扩充的空间大小。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.next();
int cnt = 0;
int len = s.length();
for(int i=0;i < len;i++){
if(Character.isDigit(s.charAt(i))){
cnt++;
}
}
int size = len + cnt * 5;
char[] c = new char[size];
int j =0;
for(int i=0;i < len;i++){
if(!Character.isDigit(s.charAt(i))){
c[j] = s.charAt(i);
j++;
}else{
c[j] = 'n';
c[j+1] = 'u';
c[j+2] = 'm';
c[j+3] = 'b';
c[j+4] = 'e';
c[j+5] = 'r';
j += 6;
}
}
String res = new String(c);
System.out.println(res);
}
}