1.简述:
满足以下条件的密码被认为是强密码:
由至少6个,至多20个字符组成。
包含至少一个小写字母,至少一个大写字母,和至少一个数字。
不包含连续三个重复字符 (比如”Baaabb0″是弱密码, 但是”Baaba0″是强密码)。
给你一个字符串password,返回将password修改到满足强密码条件需要的最少修改步数。如果password已经是强密码,则返回0。
在一步修改操作中,你可以:
- 插入一个字符到password,
- 从password中删除一个字符,或
- 用另一个字符来替换password中的某个字符。
示例 1:
输入:password = "a"
输出:5
示例 2:
输入:password = "aA1"
输出:3
示例 3:
输入:password = "1337C0d3"
输出:0
2.代码实现:
class Solution {
public int strongPasswordChecker(String password) {
int n = password.length();
int hasLower = 0, hasUpper = 0, hasDigit = 0;
for (int i = 0; i 0 && cnt >= 3) {
if (cnt % 3 == 0) {
// 如果是 k % 3 = 0 的组,那么优先删除 1 个字符,减少 1 次替换操作
--remove;
--replace;
} else if (cnt % 3 == 1) {
// 如果是 k % 3 = 1 的组,那么存下来备用
++rm2;
}
// k % 3 = 2 的组无需显式考虑
}
replace += cnt / 3;
cnt = 1;
cur = ch;
}
}
if (remove > 0 && cnt >= 3) {
if (cnt % 3 == 0) {
--remove;
--replace;
} else if (cnt % 3 == 1) {
++rm2;
}
}
replace += cnt / 3;
// 使用 k % 3 = 1 的组的数量,由剩余的替换次数、组数和剩余的删除次数共同决定
int use2服务器托管网 = Math.min(Math.min(replace, rm2), remove / 2);
replace -= use2;
remove -= use2 * 2;
// 由于每有一次替换次数就一定有 3 个连续相同的字符(k / 3 决定),因此这里可以直接计算出使用 k % 3 = 2 的组的数量
int use3 = Math.min(replace, remove / 3);
replace -= use3;
remove -= use3 * 3;
return (n - 20) + Math.max(replace, 3 - categor服务器托管网ies);
}
}
}
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
Spring是什么? Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。 Spring的优点 通过控制反转和依赖注入实现松耦合。 支持面向切面的编程,并且把应用业务逻辑和系统服务分开。 通过切面和模板减少样板式代码。 声明式事务的支持…