版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HcJsJqJSSM/article/details/84326822
一:题目一
题目描述:
对字符串进行RLE压缩,将相邻的相同字符,用计数值和字符值来代替。例如:aaabccccccddeee,则可用3a1b6c2d3e来代替。
输入描述:
输入为a-z,A-Z的字符串,且字符串不为空,如aaabccccccddeee
输出描述:
压缩后的字符串,如3a1b6c2d3e
解决思路:
首先是输入一个字符串,然后转换为字符数组,从第一个字符开始统计,如果和第一个相等就计数,如果不相等就立即追加字符串中,然后从当前不相等的字符开始继续执行for循环.最后进行统计输出.
AC代码如下.
解法一:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
String str = cin.nextLine();
StringBuilder builderZip=new StringBuilder();
char[] chars = str.toCharArray();
char c = chars[0];
int count=0;
for(int i=0;i<chars.length;i++)
{
if(c==chars[i]){
count++;
}else {
builderZip.append(count+""+c);
c = chars[i];
count =1;
}
}
builderZip.append(count+""+c);
System.out.println(builderZip.toString());
}
}
解法二:(将一个字符串中的相同字符使用空串替代,计算替换后新的字符串长度差,可以计算出所有相同字符的个数了.)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
String str = cin.nextLine();
int length=0;
while(str.length()>0){
String tempStr=String.valueOf(str.charAt(0));
String newStr=str.replaceAll(tempStr, "");
length=str.length()-newStr.length();
str=newStr;
System.out.print(length+""+tempStr);
length=0;
}
}
}
二 :题目二
题目描述:
一个非空整数数组,计算连续子数组的最大和。如果最大的和为正数,则输出这个数;如果最大的和为负数或0,则输出0.
输入描述:
3,-5,7,-2,8
输出描述:
13
解题思路:
动态规划直接解决,连续子数组最大和,注意输入的是一个数组,但是没有指定数组的大小,输入字符串然后进行分割进行转换为数组.
不使用自带的库函数.
就是当前所有的值的和,和接下来的值进行比较如果大于就赋值新的,如果小于那么当前的最大值任然是这个值,继续运算.从后往前计算.
AC代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin=new Scanner(System.in);
String[] strings=cin.nextLine().split(",");
int[] nums=new int[strings.length];
for(int i=0;i<nums.length;i++){
nums[i]=Integer.valueOf(strings[i]);
}
System.out.println(getMaxResult(nums));
}
public static int getMaxResult(int[] nums){
int res,fmax;
fmax=nums[0];
res=fmax;
if(nums.length==0){
return 0;
}
for(int i=1;i<nums.length;i++){
if(fmax+nums[i]>nums[i]){
fmax=fmax+nums[i];
}else{
fmax=nums[i];
}
if(res<fmax){
res=fmax;
}
}
if(res>0){
return res;
}else{
return 0;
}
}
}