一、反转字符串
解题思路
本题的解法是将字符串最左边和最右边的字母交换顺序,然后由两边向中间靠拢进行交换。本题可以采用for循环和temp来完成。具体代码如下:
class Solution {
public void reverseString(char[] s) {
//left为字符串最左边字母,right为字符串最右边字母
int left=0,right=s.length-1;
while(left<right){
char temp=s[left];
s[left]=s[right];
s[right]=temp;
left++;
right--;
}
}
}
二、反转字符串||
解题思路
本题难度略有提升,指定了字符串反转的规则,不过仍然可以模仿第一题的解题方法。
具体代码如下:
class Solution {
public String reverseStr(String s, int k) {
char[] ch=s.toCharArray();
for(int i=0;i<ch.length;i+=2*k){
//left为字符串开始字母的下标,right为字符串结束字母的下标
//如果反转后剩余长度不足2k,则right剩余长度,否则要满足right-left=k
int left=i,right=Math.min(ch.length-1,left+k-1);
while(left<right){
char temp=ch[left];
ch[left]=ch[right];
ch[right]=temp;
left++;
right--;
}
}
return new String(ch);
}
}
三、替换数字
解题思路
本题首先要确定字符串中共有几个数字,然后根据数字个数扩展数组长度,再将“number”t填入到数组中去。具体解法如下:
import java.util.*;
public class Main{
public static void main (String[] args) {
Scanner scanner=new Scanner(System.in);
String s=scanner.next();
//l用来记录数组的总长度
int l=s.length();
for(int i=0;i<s.length();i++){
//每发现一个数字,就让l=l+5
if(s.charAt(i)>='0' && s.charAt(i)<='9')
l+=5;
}
char[] ns=new char[l];
//先将原数组中的值保存到新数组中
for(int i=0;i<s.length();i++){
ns[i]=s.charAt(i);
}
//从后往前填充数组,原因是因为这样可以减少数组移动的次数
for(int i=s.length()-1,j=l-1;i>=0;i--){
if('0'<=ns[i]&& '9'>=ns[i]){
ns[j--]='r';
ns[j--]='e';
ns[j--]='b';
ns[j--]='m';
ns[j--]='u';
ns[j--]='n';
}
else{
ns[j--]=ns[i];
}
}
System.out.println(ns);
}
}
四、今日收获
今天的题目中体来说不是很难,不过需要知道一些string和char相关的函数。acm模式还不够熟练,需要多练习。
今日学习+解题+博客=1h30min。