StringBuffer可以优化String的内存超限(pat甲级1140的刷题笔记)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class test1140 {
public static void main(String[] args) throws IOException{
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
String str[]=br.readLine().split(" ");
int D=Integer.parseInt(str[0]);
int n=Integer.parseInt(str[1]);
String ans=D+"";
for (int i = 0; i <n-1; i++) {
String nowans="";
char now=ans.charAt(0);
int len=0;
for (int j = 0; j < ans.length(); j++) {
if(now==ans.charAt(j))len++;
else {
nowans+=now+""+len;
now=ans.charAt(j);
len=1;
}
}
nowans+=now+""+len;
ans=nowans;
}
System.out.println(ans);
}
}
由于String类型是引用类型每次进行加值计算都会重新定义内存空间,相当于重新new出来,所以会导致这一题最后一个样例内存超限
而使用StringBuffer就不会,看了其它人的博客,StringBuffer和StringBuilder有相似的功能,一般情况下用StringBuffer就行,它更快,再考虑线程安全的情况下用StringBuilder
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
String str[]=br.readLine().split(" ");
int D=Integer.parseInt(str[0]);
int n=Integer.parseInt(str[1]);
String ans=D+"";
StringBuffer nowans=new StringBuffer("");
char now=ans.charAt(0);
for (int i = 0; i <n-1; i++) {
nowans.delete(0, nowans.length());
now=ans.charAt(0);
int len=0;
for (int j = 0; j < ans.length(); j++) {
if(now==ans.charAt(j))len++;
else {
nowans=nowans.append(now).append(len);
now=ans.charAt(j);
len=1;
}
}
nowans=nowans.append(now).append(len);
ans=nowans.toString();
}
System.out.println(ans);
}
}