【力扣】第 396 场周赛 A~C

发布于:2024-05-08 ⋅ 阅读:(30) ⋅ 点赞:(0)

原题链接:竞赛 - 力扣 (LeetCode)

目录

A. 有效单词

B. K周期字符串需要的最少操作次数

C. 同位字符串连接的最小长度 (补题)


A. 有效单词

根据题意模拟即可。

首先字符串长度小于3,直接return false;

f1判断是否有元音字母,f2判断是否有辅音字母(值为1表示有,值为0表示没有)。开一个set来存字符种类数,小于3直接return false。

最后如果f1和f2均为1,return true;否则 return false。

class Solution {
public:
    bool isValid(string word) {
        if(word.size()<3) return false;
        int f1=0,f2=0;
        set<char> s;
        for(auto i:word){
            if(i=='@'||i=='#'||i=='$')  return false;
            s.insert(i);
            if(i=='a'||i=='e'||i=='i'||i=='o'||i=='u'||
              i=='A'||i=='E'||i=='I'||i=='O'||i=='U') f1=1;
            else if((i>='a'&&i<='z')||(i>='A'&&i<='Z')) f2=1;
        }
        if(s.size()<3) return false;
        if(f1&&f2) return true;
        else return false;
    }
};

B. K周期字符串需要的最少操作次数

因为字符串长度word.size()和子串的长度k已知。我们令分割(使用s.substr()实现字符串分割)出的子串个数为x=word.size()/k。

从头遍历字符串,将字符串分割为x个长度为k的子串,依次存入到map中。

开一个变量mx表示个数最多的子串的个数,并初始化为0。遍历map,找到个数最多的子串。

return x-mx 即可。

class Solution {
public:
    int minimumOperationsToMakeKPeriodic(string word, int k) {
        int x=word.size()/k;
        map<string,int> mp;
        for(int i=0;i<word.size();i+=k){
            mp[word.substr(i,k)]++;
        }
        int mx=0;
        for(auto i:mp) mx=max(mx,i.second);
        return x-mx;
    }
};

C. 同位字符串连接的最小长度 (补题)

将字符串s分为长度为p的子串,并检查每个子串字母出现次数是否相同。

class Solution {
public:
    int minAnagramLength(string s) {
        int n=s.size();
        int cnt[26]={0};
        for(auto i:s) cnt[i-'a']++; //计算整个字符串每种字母出现次数

        auto check = [&](int len){ //检查子串长度是否可能为len
            for(int i=0;i<n;i+=len){
                int tmp[26]={0}; //统计当前子串每种字母出现次数
                for(int j=0;j<len;j++) tmp[s[i+j]-'a']++;
                for(int j=0;j<26;j++){
                    if(tmp[j]*(n/len)!=cnt[j]) return false;
                }
            }
            return true;
        };
        for(int i=1;i<=n;i++){ //枚举子串的长度
            if(n%i==0&&check(i)) return i;
        }
        return -1;
    }

};