leetcode之C#篇1
来源:互联网 发布:铁路 知乎 编辑:程序博客网 时间:2024/06/13 03:24
leetcode之Strong Password Checker解法
这个问题的大概意思是检查密码强度,有三个要求
1.密码长度在6到20位之间
2.必须包含大小写字母和数字
3.不允许三个及以上重复字符
函数返回结果是将不符合的密码变成合适的密码所需要的操作次数,启动增减,修改,删除都算一次操作
这个问题,我的思路怎么都没有理清楚,但是代码通过了。
首先,分三种情况讨论,当小于等于20的时候,很容易搞定
而当大于20时候的删除,却是麻烦。第一次写C#语言就碰到这个问题,很难说清楚
不过这里的C#语言没有用到什么高深的知识,代码也很容易转化为C语言版的
public class Solution { public int StrongPasswordChecker(string s) { char[] pwd; int len,temp=0,t=0; pwd=s.ToCharArray(); len=s.Length; if(len<6) { temp=6-len; t=number_check(pwd)+uppercase_check(pwd)+lowercase_check(pwd); return temp>=t?temp:t; } if(len<21) { temp=repeat_check(pwd); t=number_check(pwd)+uppercase_check(pwd)+lowercase_check(pwd); return temp>=t?temp:t; } else { List<int> repeat = new List<int>(); int i=0,j; t=number_check(pwd)+uppercase_check(pwd)+lowercase_check(pwd); while(i<s.Length-1) { j=i+1; while(j<s.Length) { if(s[i]==s[j]) { j++; } else { break; } } if(j-i>2) { repeat.Add(j-i); } i=j; } int delete=len-20; repeat.Sort(); for(int m=0;m<repeat.Count;m++) { if(delete>=(repeat[m]%3+1)) { delete-=1+repeat[m]%3; repeat[m]-=1+repeat[m]%3; } if(delete==0) { break; } } if(delete>0) { for(int n=0;n<repeat.Count;n++) { while(repeat[n]>2) { if(delete>2) { repeat[n]-=3; delete-=3; } else { repeat[n]-=delete; delete=0; } if(delete==0) { break; } } if(delete==0) { break; } } } foreach (var item in repeat) { temp+=item/3; } return len-20+(temp>t?temp:t); } } public int repeat_check(char[] s) { int i=0,t=0; while(i<s.Length-2) { if(s[i]==s[i+1]&&s[i]==s[i+2]) { t++; i+=3; continue; } i++; } return t; } public int number_check(char[] s) { int i=0; for(i=0;i<s.Length;i++) { if(s[i]>='0'&&s[i]<='9') { return 0; } } return 1; } public int uppercase_check(char[] s) { int i=0; for(i=0;i<s.Length;i++) { if(s[i]>='A'&&s[i]<='Z') { return 0; } } return 1; } public int lowercase_check(char[] s) { int i=0; for(i=0;i<s.Length;i++) { if(s[i]>='a'&&s[i]<='z') { return 0; } } return 1; }}
更多leetcode问题源码,请查看我的github地址https://github.com/Jum1023/leetcode
0 0
- leetcode之C#篇1
- leetcode 之 python篇1
- leetcode 1:TwoSum (C#语言版)
- 【LeetCode】C# 1、Two Sum
- LeetCode之旅(1)
- LeetCode之旅-1
- LeetCode #1 Two Sum C# Solution
- C#类型转换之初级篇(1)
- C#之基础篇
- C#之结尾篇
- C#篇之---基础
- C# 篇之---委托
- C#篇之---数据类型
- C#篇之---XML
- C#之初级篇
- C#之完结篇
- c#之坐标篇
- C#之Chart篇
- 经典算法之一:快速排序
- bzoj 4008 [HNOI2015]亚瑟王 期望dp
- SVN错误:由于目标机器积极拒绝,无法连接 的解决方法
- codeforces 747D Winter Is Coming
- java.lang.OutOfMemoryError: Java heap space
- leetcode之C#篇1
- Spring AOP原理及拦截器
- freertos 内存管理
- 安卓学习笔记——SQLite
- BI工具选型指标,如何选择好的BI工具
- win8.1下opencv2.4.13+vs2013的配置方法
- C++ primer 十六 继承:is-a关系
- Zurmo(十)之zurmoc命令的作用
- redis的Java客户端jedis池的介绍及使用