很多时候不知道用哪个函数方法,我也太菜了。
344比较简单。
541:
public String reverseStr(String s, int k) {
char[] ch = s.toCharArray();
for(int i = 0;i<s.length();i+=2*k){
int start=i;
int end=Math.min(s.length()-1,start+k-1);
while(start<end){
char temp=0;
temp=ch[start];
ch[start]=ch[end];
ch[end]=temp;
end--;
start++;
}
}
return new String(ch);
}
54:
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
System.out.println(replace(s));
sc.close();
}
public static String replace(String s){
int len = s.length();
for(int i = 0;i<s.length();i++){
if(s.charAt(i)>='0'&&s.charAt(i)<='9'){
len+=5;
}
}
char[] ch = new char[len];
for(int i=0;i<s.length();i++){
ch[i]=s.charAt(i);
}
for(int i=s.length()-1,j=len-1;i>=0;i--){
//int i = s.length-1;
if(ch[i]>='0'&&ch[i]<='9'){
ch[j--]='r';
ch[j--]='e';
ch[j--]='b';
ch[j--]='m';
ch[j--]='u';
ch[j--]='n';
}else{
ch[j--]=ch[i];
}
}
return new String(ch);
}
}
搞了半天都不对,最后放在idea里单步调试发现了问题,把j定在for循环里,每次它都没有被更新。
过程1.先计算扩容后需要多少长度
2.定义一个新的字符数组把旧的赋值过去
3.定义两个指针,分别指向新旧的末尾,遍历旧数组,按需向新数组赋值。
其他方法:也可以用StringBuilder,也可以直接申请新数组,不用向里面先赋值,所有操作均在一次循环里完成。
151:有很多细节需要处理,还有一个小问题没解决,得进IDEA单步调试,明天再看
1.移除多余字符
2.反转字符串
3.反转每个单词
public String reverseWords(String s) {
StringBuilder sb =removeSpace(s);
reverseString(sb,0,sb.length()-1);
reverseEachword(sb);
return sb.toString();
}
public StringBuilder removeSpace(String s){
int start = 0;
int end=s.length()-1;
while(s.charAt(start)==' ') start++;
while(s.charAt(end)==' ') end--;
StringBuilder sb = new StringBuilder();
while(start<=end){
char c = s.charAt(start);
if(c!=' '||sb.charAt(sb.length()-1)!=' '){
sb.append(c);
}
start++;
}
return sb;
}
public void reverseString(StringBuilder sb,int start,int end){
while(start<end){
char temp = sb.charAt(start);
sb.setCharAt(start,sb.charAt(end));
sb.setCharAt(end,temp);
start++;
end--;
}
}
public void reverseEachword(StringBuilder sb){
int start=0;
int end=1;
int n=sb.length();
while(start<n){
while(end<n&&sb.charAt(end)!=' '){
end++;
}
reverseString(sb,start,end-1);
start=end+1;
end=start+1;
}
}
自己刷题好慢呀,还是要坚持。