2299-强密码检验器II

2299. 强密码检验器 II

思路(Java)

首先设置一个flag数组,表示第2-5项是否满足

  1. 首先判断长度,小于8直接return false
  2. 遍历字符串,将其中第2-5个条件进行判断,只要有满足条件的那么f对应的flag[i]直接设为1,然后下次就不再需要进行此次判断(通过flag的值是否为0进行判断,如果为0,那么就继续进行判断,如果为1,那么就已存在满足条件的值,跳过即可)
  3. 最后一个条件,在遍历过程中,只要存在两个相同的连续字符,直接返回return false,节约时间

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public boolean strongPasswordCheckerII(String password) {
int len = password.length();
int[] flag = new int[4];
char[] str = password.toCharArray();
if(len < 8){
return false;
}
for(int i = 0; i < len; i++){
if(flag[0] == 0 && str[i] >= 'a' && str[i] <= 'z'){
flag[0] = 1;
}
if(flag[1] == 0 && str[i] >= 'A' && str[i] <= 'Z'){
flag[1] = 1;
}
if(flag[2] == 0 && str[i] >= '0' && str[i] <= '9'){
flag[2] = 1;
}
// 1! 2@ 3# 4$ 5% 6^ 7& 8* 9( 10) 11- 12+
if(flag[3] == 0 && (str[i] == '!' || str[i] == '@' || str[i] == '#' || str[i] == '$'
|| str[i] == '%' || str[i] == '^' || str[i] == '&' || str[i] == '*' || str[i] == '('
|| str[i] == ')' || str[i] == '-' || str[i] == '+')){
flag[3] = 1;
}
if(i+1 < len && str[i] == str[i+1]){
return false;
}
}
if(flag[0] == 1 && flag[1] == 1 && flag[2] == 1 && flag[3] == 1){
return true;
}else{
return false;
}
}

592.分数加减运算

592. 分数加减运算

*难度中等**

题目描述

1.jpg

解题思路

  • 根据分数的计算方法,使用最原始的方法进行计算,最后进行化简即可
  • 那么最原始的方法就是根据以下公式

2.jpg

  • 那么,设计所需要做的就是:
  1. 先将给定的字符串按照要求提出分子和分母并将其转化为整数,
  2. 将给定的“+”和减号“-”带入分子之中,即加号则分子为正,减号则分子为负
  3. 获取分母乘积之和
  4. 将分子*分母乘积之和/分母,并获得分子相加之和
  5. 通过最大公约数进行化简,得出最终结果

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
class Solution {
//求取最大公约数
public int gcd(int x, int y){
if(y != 0){
return gcd(y, x%y);
}else{
return x;
}
}
// i 分子,j 分母,k 符号
public String fractionAddition(String expression) {
// 用于计算最后一项,即j+1,保证存在
expression = expression + "+";
int len = expression.length();
//存储分母
int[] down = new int[11];
//存储分子
int[] up = new int[11];
// 分母乘积之和
int sum = 1;
int cnt = 0;
//Set<Integer> down = new HashSet<>();
int i = 0, j = 0, k = 0;
int flag = 0;
// 开头有无减号,分类讨论
if(expression.charAt(0) == '-'){
i = 1;
j = 3;
k = 0;
}else{
i = 0;
j = 2;
k = 3;
flag = 1;
}

int num1 = 0, num2 = 1;
while( i < len && j < len && k < len){
// 获取符号
char ch = ' ';
if(flag == 1){
ch = '+';
k = -1;
flag = 0;
}else{
ch = expression.charAt(k);
}
//System.out.println("---"+expression.substring(i+1,i+2));
//如果分子为10,占据2个长度,需要进行判断并将i+1, j+1, k+1保证后续循环还能继续找到对应位置
if(expression.charAt(i+1) != '/'){
num1 = 10;
i++;
j++;
k++;
}else{
num1 = Integer.parseInt(expression.substring(i, i + 1));
}
//System.out.println("j+1: "+expression.charAt(j+1));
// 分母同理。不过要注意最后于一项
if(expression.charAt(j+1) != '+' && expression.charAt(j+1) != '-'){
num2 = 10;
i++;
j++;
k++;
}else {
num2 = Integer.parseInt(expression.substring(j, j + 1));
}
if(ch == '-'){
num1 = 0-num1;
}
//out.println("num1: "+num1);
//System.out.println("num2: "+num2);
up[cnt] = num1;
down[cnt++] = num2;
sum = sum * num2;
//dwon.add(num2);
// 加4获得下一项对应位置
i = i+4;
j = j+4;
k = k+4;
}
// 分子相加之和
int resUp = 0;
for(int a = 0; a < cnt; a++){
resUp += up[a] * (sum / down[a]);
}
//System.out.println("---"+sum);
//System.out.println("---"+resUp);
// 获取最大公约数
int g = gcd(resUp, sum);
if(g < 0)
g = 0-g;
return resUp/g + "/" + sum/g;
}
}

PS: 不一定最好的,因为做完的时候已经23:57了~_~

每日一图

3.jpg

Git命令

Git使用

  1. git init
    1. 初始化仓库文件夹,自动生成.git文件夹
  2. git add 文件名
    1. 将目的文件添加到暂存区
    2. git add . 表示将当前路径下所有文件均添加到暂存区
  3. git commit -m “注释”
    1. 将暂存区文件提交到本地仓库当前分支中
    2. git status 可以查看当前暂存区文件,以及文件修改后是否添加到暂存区,未添加则会显示为红色,已添加则会显示为绿色
  4. git push
    1. 将本地仓库push到远程仓库当前分支中

[vSiH81.png

1184-公交站间的距离

1184:公交站间的距离

题目介绍

vSPL7Q.png

解题思路

  • 这是一道简单的题
  • 由于公交车只能顺时针或逆时针移动,而且所有点的移动顺序是固定的,例如从1到3的顺序就只有1,2,3或是倒着走,因为其他方式的路程无疑会更长
  • 所以只需要计算全部路程的长度和其顺序走或逆序走的路程数,然后选择较小的数值就是最短距离

参考代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public int distanceBetweenBusStops(int[] distance, int start, int destination) {
int sum = 0;
int part1 = 0;
if(start > destination){
int tmp = start;
start = destination;
destination = tmp;
}
for(int i = 0; i < distance.length; i++){
sum += distance[i];
}
for(int i = start; i < destination; i++){
part1 += distance[i];
}
if(sum - part1 < part1){
return sum-part1;
}else{
return part1;
}
}
}

简单的一题!!!

[1.jpg