算法刷题集训第二天--字符串

📜个人简介

⭐️个人主页:摸鱼の文酱博客主页🙋‍♂️
🍑博客领域:java编程基础,mysql
🍅写作风格:干货,干货,还是tmd的干货
🌸精选专栏:【Java】【mysql】 【算法刷题笔记】
🎯博主的码云gitee,平常博主写的程序代码都在里面。
🚀支持博主:点赞👍、收藏⭐、留言💬
🍭作者水平很有限,如果发现错误,一定要及时告知作者哦!感谢感谢!

今日学习内容:字符串

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

📃2278. 字母在字符串中的百分比

🎯解题思路

📒思路一:枚举

  1.思路一:将字符串中的每一个字符依次取出与给定字符比较,一样就计数器加一,最后除以字符串长度得出数字

 public int percentageLetter(String s, char letter) 
    {
        int n = s.length();

        int cnt = 0;
        for (int i = 0; i < s.length(); i ++)
        {
            if (s.charAt(i) == letter)
            {
                cnt ++;
            }
        }

        int res = (int)((double)cnt / n * 100);
        return res;
    }

📃551. 学生出勤记录 I

🎯解题思路

📒思路一:遍历

  1.思路一:将记录依次取出 记录A的数量,大于或等于两个false 判断连续L的数量,达到三个连续的false
其余情况true

class Solution {
    public boolean checkRecord(String s) {
        int n = s.length();
        char[] cs = s.toCharArray();
        for (int i = 0, cnt = 0; i < n; ) {
            char c = cs[i];
            if (c == 'A') {
                cnt++;
                if (cnt >= 2) return false;
            } else if (c == 'L') {
                int j = i;
                while (j < n && cs[j] == 'L') j++;
                int len = j - i;
                if (len >= 3) return false;
                i = j;
                continue;
            }
            i++;
        }
        return true;
    }
}

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

🎯解题思路

📒思路一:遍历+库函数

class Solution {
    public int countPrefixes(String[] words, String s) {
         int cnt = 0;
        for (String w : words)
             if (s.startsWith(w)) cnt++;
        return cnt;

    }
}

📃1071. 字符串的最大公因子

🎯解题思路

📒思路一:辗转相除法

  1.思路一:由题意得知,需要在字符串str1和字符串str2中找寻一个最大的字符串X,使得X可以同时除尽字符串str1和字符串str2。
你品,你细品,“除尽”是不是意味着——字符串str1和str2内只存在一或多个的字符X。
即,字符串str1可由x个字符串X拼接而成,字符串str2可由y个字符串X构成,x、y皆大于等于1。
可得公式,str1 + str2 = (x + y)X。那么同理,str2 + str1 = (y + x)X。
所以只要满足str1 + str2 == str2 + str1,说明了在字符串str1和str2内必存在字符串X。

private int gcd(int a,int b){ //最大公约数
        return b==0?a:gcd(b,a%b);
    }

    public String gcdOfStrings2(String str1, String str2) {
        // 假设str1是N个x,str2是M个x,那么str1+str2肯定是等于str2+str1的。
        if (!(str1 + str2).equals(str2 + str1)) {
            return "";
        }
        // 辗转相除法求gcd。
        return str1.substring(0, gcd(str1.length(), str2.length()));
    }

📒思路二:枚举法

  1.思路一:首先答案肯定是字符串的某个前缀,然后简单直观的想法就是枚举所有的前缀来判断,我们设这个前缀串长度为

在这里插入图片描述

所以我们可以枚举符合长度条件的前缀串,再去判断这个前缀串拼接若干次以后是否等于 str1 和 str2 即可。
由于题目要求最长的符合要求的字符串 X,所以可以按长度从大到小枚举前缀串,这样碰到第一个满足条件的前缀串返回即可。

class Solution {
    public String gcdOfStrings(String str1, String str2) {
        int len1 = str1.length(), len2 = str2.length();
        for (int i = Math.min(len1, len2); i >= 1; --i) { // 从长度大的开始枚举
            if (len1 % i == 0 && len2 % i == 0) {
                String X = str1.substring(0, i);
                if (check(X, str1) && check(X, str2)) {
                    return X;
                }
            }
        }
        return "";
    }

    public boolean check(String t, String s) {
        int lenx = s.length() / t.length();
        StringBuffer ans = new StringBuffer();
        for (int i = 1; i <= lenx; ++i) {
            ans.append(t);
        }
        return ans.toString().equals(s);
    }
}

Vivado2023是一款集成开发环境软件,用于设计和验证FPGA(现场可编程门阵列)和可编程逻辑器件。对于使用Vivado2023的用户来说,license是必不可少的。 Vivado2023的license是一种许可证,用于授权用户合法使用该软件。许可证分为多种类型,包括评估许可证、开发许可证和节点许可证等。每种许可证都有不同的使用条件和功能。 评估许可证是免费提供的,让用户可以在一段时间内试用Vivado2023的全部功能。用户可以使用这个许可证来了解软件的性能和特点,对于初学者和小规模项目来说是一个很好的选择。但是,使用评估许可证的用户在使用期限过后需要购买正式的许可证才能继续使用软件。 开发许可证是付费的,可以永久使用Vivado2023的全部功能。这种许可证适用于需要长期使用Vivado2023进行开发的用户,通常是专业的FPGA设计师或工程师。购买开发许可证可以享受Vivado2023的技术支持和更新服务,确保软件始终保持最新的版本和功能。 节点许可证是用于多设备或分布式设计的许可证,可以在多个计算机上安装Vivado2023,并共享使用。节点许可证适用于大规模项目或需要多个处理节点进行设计的用户,可以提高工作效率和资源利用率。 总之,Vivado2023 license是用户在使用Vivado2023时必须考虑的问题。用户可以根据自己的需求选择合适的许可证类型,以便获取最佳的软件使用体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值