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;
}
}