为了激励自己刷算法题,把水的两道题做成题解,方便共同学习。一道是求字符串最大匹配数值,一道是字符串有关的基础运用
题目一链接:超市货物架调整
一眼字符串最大匹配数值
思路:
- 统计
s中每个字符的出现次数。 - 统计
c中每个字符的出现次数。 - 计算每个字符在
s中可以匹配的最大次数,即min(s_count[char], c_count[char])。 - 累加所有字符的匹配次数。
我们应该按照出现次数进行计算,以便最大化匹配的字符数。 AC代码:
from collections import defaultdict
# s和c进行匹配最大字符串长度
def solution(n: int, m: int, s: str, c: str) -> int:
# 使用 defaultdict 统计 s 和 c 中每个字符的出现次数
s_count = defaultdict(int)
c_count = defaultdict(int)
for char in s:
s_count[char] += 1
for char in c:
c_count[char] += 1
# 计算最多可以匹配的字符数
max_match = 0
for char in c_count:
if char in s_count:
max_match += min(s_count[char], c_count[char])
return max_match
if __name__ == '__main__':
print(solution(3, 4, "abc", "abcd") == 3)
print(solution(4, 2, "abbc", "bb") == 2)
print(solution(5, 4, "bcdea", "abcd") == 4)
题目二链接:数字字符串格式化
- 找到第一个不为0的字符:
# 这部分代码通过循环找到第一个不为零的字符,并截取从该字符开始的部分。
start = 0
while start < len(s) and s[start] == '0':
start += 1
s = s[start:]
- 分割整数和小数部分:
# 使用 `split('.')` 方法将字符串分割成整数部分和小数部分。
parts = s.split('.')
integer_part = parts[0]
decimal_part = '.' + parts[1]
if len(parts) > 1 else ''
- 格式化整数部分:
# 从整数部分的末尾开始,每隔三位插入一个逗号。
n = len(integer_part)
str_result = ''
for i in range(n):
if i > 0 and (n - i) % 3 == 0:
str_result += ','
str_result += integer_part [i]
- 拼接结果:
# 将格式化后的整数部分和小数部分拼接起来。
return str_result + decimal_part
AC代码
def solution(s: str) -> str:
start = 0
while start < len(s) and s[start] == '0':
start +=1
s = s[start:]
# 分隔
parts = s.split('.')
integer_part = parts[0] #整数
decimal_part = '.' + parts[1] if len(parts) > 1 else ''
n = len(integer_part)
str_result = ''
for i in range(n):
if i > 0 and (n-i) % 3 == 0:
str_result +=','
str_result += integer_part[i]
return str_result + decimal_part
if __name__ == '__main__':
print(solution("1294512.12412") == '1,294,512.12412')
print(solution("0000123456789.99") == '123,456,789.99')
print(solution("987654321") == '987,654,321')`
有想要JS代码,看这:
function solution(s) {
// 找到第一个不为0的字符
let start = 0;
while (s[start] === '0') {
start++;
}
s = s.substring(start);
// 分割整数和小数部分
let parts = s.split('.');
let integerPart = parts[0];
let decimalPart = parts.length > 1 ? '.' + parts[1] : '';
// 格式化整数部分
let formattedIntegerPart = '';
for (let i = 0; i < integerPart.length; i++) {
if (i > 0 && (integerPart.length - i) % 3 === 0) {
formattedIntegerPart += ',';
}
formattedIntegerPart += integerPart[i];
}
// 拼接结果
return formattedIntegerPart + decimalPart;
}
function main() {
console.log(solution("1294512.12412") === '1,294,512.12412');
console.log(solution("0000123456789.99") === '123,456,789.99');
console.log(solution("987654321") === '987,654,321');
}
main();
谢幕!