【复盘】六月集训(第02天)——字符串

本文主要介绍了四个字符串处理的编程题目,包括计算字母百分比、判断学生出勤记录、统计字符串前缀数量以及寻找字符串的最大公因子。通过遍历、条件判断和辗转相除法等方法进行解题,展示了在算法和字符串操作上的基本技巧和思路。
摘要由CSDN通过智能技术生成

一、前言

本篇文章是根据英雄哥的六月集训的直播刷题写的复盘。
今天是第二天,继续加油!
若有不对的地方,欢迎大佬们批评指正。

二、题目链接

2278. 字母在字符串中的百分比
551. 学生出勤记录 I
2255. 统计是给定字符串前缀的字符串数目
1071. 字符串的最大公因子

三、解题思路

1. 字母在字符串中的百分比


  • 遍历一遍字符串计算出letter的数量再除以s的长度即可。
class Solution {
   public static int percentageLetter(String s, char letter) {
        char[] chars = s.toCharArray();
        int num = 0;
        String let =  String.valueOf(letter);
        for(int i = 0;i < chars.length;i++) {
            String tmp = String.valueOf(chars[i]);
            if(tmp.equals(let)) {
                num++;
            }
        }
        return (num*100/chars.length);
    }
}

2.学生出勤记录 I


  • 先遍历数组计算出A的数量,判断A的数量是否小于2,再判断字符串是否包含LLL,两个条件都满足即返回true
class Solution {
    public boolean checkRecord(String s) {
        int absebt = 0;
        boolean late = false;
        char[] tmp = s.toCharArray();
        for(int i = 0;i < tmp.length;i++) {
            if(tmp[i] == 'A') {
                absebt++;
            }
        }
        return absebt < 2 && !s.contains("LLL");
    }
}

3. 统计是给定字符串前缀的字符串数目


  • 先遍历words数组,然后判断s是否包含words[i],若不包含则words[i]肯定不是s的前缀
  • 若 s包含words[i],则遍历words[i]判断是否是s的前缀,若是,则res++
class Solution {
    public int countPrefixes(String[] words, String s) {
        char[] tmp = s.toCharArray();
        int res = 0;
        for(int i = 0;i < words.length;i++) {
            if(words[i].length() > s.length()) {
                continue;
            }
            if(s.contains(words[i])) {
                for(int j = 0;j < words[i].length();j++) {
                    if(words[i].charAt(j) != s.charAt(j)) {
                        break;
                    }else if(j == words[i].length() - 1){
                        res++;
                    }
                }
            }
        }
        return res;
    }
}

4. 字符串的最大公因子

  • 先判断是否存在 字符串的最大公因子,若存在,则利用辗转相除法算出最大公约数,字符串的最大公因子的长度就是最大公约数。然后在str1或者str2从头截取最大公约数长度的子串即可。

什么是辗转相除法(GCD)呢?
例如,我们求24和60的最大公约数,假设最大公约数为m,所以24和60都可以被m整除,60可以表示为24+36,所以36也可以被m整除,所以问题就转化为求24和36的最大公约数,而36可以表示为24+12,以此类推,知道其中一个为0为止。

class Solution {
    public String gcdOfStrings(String str1, String str2) {
    	//判断是否存在 字符串的最大公因子
        if(!(str1 + str2).equals(str2 + str1)) {
            return "";
        }
        return str1.substring(0,gcd(str1.length(),str2.length()));
    }
    //辗转相除法
    public int gcd(int a,int b) {
        int remainder = a % b;
        while (remainder != 0) {
            a = b;
            b = remainder;
            remainder = a % b;
        }
        return b;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值