2021-03-28 第 234 场周赛

2021-03-28 第 234 场周赛

5713. 字符串中不同整数的数目

在这里插入图片描述
在这里插入图片描述

思路:简单的一次遍历,用集合来存储遍历到的数字。在去除前导0这一块不能简单地将字符串转换为数字,字符串长度过长,没法转换为int或long类型的数字。

class Solution {
    public int numDifferentIntegers(String word) {
        char[] s = (word+"#").toCharArray();
        Set<String> set = new HashSet<>();
        StringBuffer cur = new StringBuffer();
        for(int i = 0;i < s.length;i++) {
            if(Character.isDigit(s[i])) {
                cur.append(s[i]);
            } else {
                if(cur.length() > 0) {
                    while(cur.length() > 0 && cur.charAt(0) == '0') {
                        cur.deleteCharAt(0);
                    }
                    set.add(cur.toString());
                    cur.setLength(0);
                }
            }
        }
        return set.size();
    }
}

1806. 还原排列的最少操作步数

在这里插入图片描述

思路:模拟操作就可以了,不断的判断当前数组是否还原即可。

class Solution {
    public boolean check(int[] a, int n) {
        for(int i = 0;i < n;i++) {
            if(a[i] != i)
                return false;
        }
        return true;
    }

    public int reinitializePermutation(int n) {
        int[] last = new int[n], tmp = new int[n];
        for(int i = 0;i < n;i++) {
            last[i] = i;
        }
        for(int cnt = 1;;cnt++) {
            for(int i = 0;i < n;i++) {
                if(i%2 == 0) {
                    tmp[i] = last[i/2];
                } else {
                    tmp[i] = last[n/2+(i-1)/2];
                }
            }
            for(int i = 0;i < n;i++) {
                last[i] = tmp[i];
            }
            if(check(last, n)) {
                return cnt;
            }
        }
    }
}

5714. 替换字符串中的括号内容

在这里插入图片描述

在这里插入图片描述

思路:模拟就可以,使用replace即可。

class Solution {
    public String evaluate(String _s, List<List<String>> knowledge) {
        StringBuffer s = new StringBuffer(_s);
        Map<String,String> map = new HashMap<>();
        for(List<String> k : knowledge) {
            map.put(k.get(0), k.get(1));
        }
        int idx = 0, n = s.length();
        while(idx < n) {
            int start = s.indexOf("(", idx);
            if(start == -1) {
                break;
            }
            int end = s.indexOf(")", idx);
            String key = s.substring(start+1, end);
            String value = map.getOrDefault(key, "?");
            s = s.replace(start,end+1, value);
            idx = start + value.length();
        }
        return s.toString();
    }
}

5716. 好因子的最大数目

在这里插入图片描述

思路:竞赛的时候是不断试出来的,看了题解区发现,原来这道题是剑指 offer的原题。。。

在这里插入图片描述

class Solution {
    int mod = (int) (1e9 + 7);
    private long myPow(long a, long b) {
        long res = 1;
        while (b > 0) {
            if (b % 2 == 1) {
                res = res * a;
                res %= mod;
            }
            a = a * a;
            a %= mod;
            b = b >> 1;
        }
        return res;
    }

    public int maxNiceDivisors(int primeFactors) {
        if(primeFactors <= 3) {
            return primeFactors;
        }
        int a = primeFactors/3, b = primeFactors%3;
        long res = 0;
        if(b == 1) {
            res = myPow(3, a-1) * 4 % mod;
        } else if(b == 2) {
            res = myPow(3, a) * 2 % mod;
        } else {
            res = myPow(3,a) % mod;
        }
        return (int) res;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值