【249天】我爱刷题系列(8)

叨叨两句

  1. 量变终于迎来了质变!破壁人系列中一个过去的问题终于得到了解答!
  2. 不但要练习,还要复习,总结思路!

题17:不同大小的两个值如何拼成一个限定的值

题目描述

书写一个类,类名为Itheima;

类中有一个方法,方法名makeBricks;

我们想做一排砖(长度自己定),我们有一些小砖(每块1英寸)和大砖(每块5英寸),
如果用我们选择的砖块的数量能够拼接成功,则返回true;否则返回false,
例如:makeBricks(3, 1, 8) → true
(尽量不使用循环,太耗费时间,会导致后台验证超时)

提示

方法调用期望值
makeBricks(3,1,8)true
makeBricks(3,1,9)false
makeBricks(3,2,10)true
public class Itheima {
    public boolean makeBricks(int a, int b, int c){
        //指定长度最多可使用的大砖数
        int max = c / 5;
        //拼接分两种情况:b >= max 则最多使用max  b < max 则使用b
        
        if(b >= max){
            //需求小砖数
            if(c - max * 5 <= a){
                return true;
            } else {
                return false;
            }
        } else {
            //需求小砖数
            if(c- b * 5 <= a){
                return true;
            } else {
                return false;
            }
        }
    }
}

题18:分拣思想+重置计数器+求一组数最大值

题目描述:

书写一个类,类名为Itheima;

类中有一个方法,方法名maxBlock;

给定一个字符串,返回该字符串中连续出现个数最多的字符的数量。

提示:

方法调用期望值
maxBlock("hoopla")2
maxBlock("abbCCCddBBBxx")3
maxBlock("")0
import java.util.HashMap;

public class Itheima {
    public int maxBlock(String str){
        int max = 0;//用于记录某个字符连续出现最大次数
        int count = 1;//用于作为中间变量,记录正在遍历的字符的个数
        HashMap<Character,Integer> map = new HashMap<>();//Key:字符 Value:最大连续出现次数
        for (int i = 0; i < str.length() - 1; i++) {
            char c1 = str.charAt(i);
            char c2 = str.charAt(i + 1);
            if(c1 == c2){
                count++;
                map.put(c1,count);
                if(count > max){
                    max = count;
                    map.put(c1, max);
                }
            } else {
                count = 1;
                map.put(c2,count);
            }
        }
        
        int totalMax = 0;
        for (Character c : map.keySet()) {
            if(map.get(c) >= totalMax){
                totalMax = map.get(c);
            }
        }
        
        return totalMax;
        
        
    }
}

题19:获取镜像元素

题目描述

书写一个类,类名为Itheima;

类中有一个方法,方法名mirrorEnds;

给定一个字符串,如果字符串的前串和后串有镜面关系,即返回前串作为方法的返回值,例如:字符串
"abxyzba"的前串"ab"与后串"ba"则为镜面关系,那么返回字符串"ab",如果前串和后串都是相同字符串
就原路返回,例如:"xxYxx"返回"xxYxx"。如果两者都不符合就返回空。

提示

方法调用期望值
mirrorEnds("abXYZba")"ab"
mirrorEnds("abca")"a"
mirrorEnds("aba")"aba"
public class Itheima {
    public String mirrorEnds(String str){
        String sumStr = "";
        for (int i = 0; i < str.length(); i++) {
            if(str.charAt(i) == str.charAt(str.length() - 1 - i)){
                sumStr = sumStr + str.charAt(i);
            }
            
            if(sumStr.length() != i + 1){
                break;
            }
        }
        
        if("".equals(sumStr)){
            return "";
        }
        
        if(sumStr.length() == 1){
            return sumStr;
        }
        
        boolean sumFlag = true;
        boolean flag = false;
        for (int i = 0; i < sumStr.length() - 1; i++) {
            if(sumStr.charAt(i) == sumStr.charAt(i + 1)){
                flag = true;
            }
            sumFlag = sumFlag && flag;
        }
        
        if(sumFlag){
            return str;
        } else {
            return sumStr;
        } 
        
    }
}

题20:轮流执行代码

题目描述

书写一个类,类名为Itheima;

类中有一个方法,方法名mixString;

给定两个字符串参数a和b,创建一个更大的字符串,由a的第一个字符,b的第一个字符,
a的第二个字符,b的第二个字符等组成。 任何剩余的字符在结果的末尾。
例如:"abc"和"xyz"返回的是:"axbycz".

提示

方法调用期望值
mixString("abc","xyz")"axbycz"
mixString("Hi","There")"HTihere"
mixString("xxxx","There")"xTxhxexre"
public class Itheima {
    public String mixString(String a,String b){
        String sumStr = "";
        int maxTimes = a.length() + b.length();
        if(a.length() >= b.length()){
            for(int i = 0; i < maxTimes; i++){
                if(i / 2 < b.length()){
                    if(i % 2 == 0){
                        sumStr = sumStr + a.charAt(i / 2);
                    } else {
                        sumStr = sumStr + b.charAt(i / 2);
                    }
                } else {
                    sumStr = sumStr + a.substring(b.length());
                    break;
                }
            }
        } else {
            for(int i = 0; i < maxTimes; i++){
                if(i / 2 < a.length()){
                    if(i % 2 == 0){
                            sumStr = sumStr + a.charAt(i / 2);
                    } else {
                            sumStr = sumStr + b.charAt(i / 2);
                    } 
                } else {
                    sumStr = sumStr + b.substring(a.length());
                    break;
                }
            }
        }
        return sumStr;
    }
}

该题的简单解法

public class Itheima {
    public String mixString(String a,String b){
        String sumStr = "";
        if(a.length() >= b.length()){
            String endStr = a.substring(b.length());
            for(int i = 0; i < b.length(); i++){
                sumStr += a.charAt(i) +"" + b.charAt(i);
            }
            sumStr += endStr;
        } else {
            String endStr = b.substring(a.length());
            for(int i = 0; i < a.length(); i++){
                sumStr += a.charAt(i) + "" + b.charAt(i);
            }
            sumStr += endStr;
            
        }
        return sumStr;
    }
}

题21:标记思想的典型运用

题目描述

书写一个类,类名为Itheima;

类中有一个方法,方法名only14;

给定一个整型数组,如果所有元素都是1和4或者其中之一,就返回true。

提示

方法调用期望值
only14([1,4,1,4])true
only14([1,4,2,4])false
only14([1,1])true
public class Itheima {
    public boolean only14(int[] arr){
        boolean sumFlag = true;
        boolean flag = false;
        for (int i = 0; i < arr.length; i++) {
            if(arr[i] == 1 || arr[i] == 4){
                flag = true;
            } else {
                flag = false;
            }
            sumFlag = sumFlag && flag;
        }
        return sumFlag && flag;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值