Skip to content

Commit f10401e

Browse files
committed
update
1 parent 00beebe commit f10401e

File tree

3 files changed

+127
-0
lines changed

3 files changed

+127
-0
lines changed

0409-最长回文串.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# 最长回文串
2+
3+
## 题目描述
4+
5+
给定一个包含大写字母和小写字母的字符串,找到通过这些字母构造成的最长的回文串。
6+
7+
在构造过程中,请注意区分大小写。比如 `"Aa"` 不能当做一个回文字符串。
8+
9+
假设字符串的长度不会超过 1010。
10+
11+
```
12+
输入:
13+
"abccccdd"
14+
15+
输出:
16+
7
17+
18+
解释:
19+
我们可以构造的最长的回文串是"dccaccd", 它的长度是 7。
20+
```
21+
22+
## 分析
23+
24+
统计字母频率,每两个凑成一对。若有奇数个字母,则结果还要加1。
25+
26+
## 算法
27+
28+
```java
29+
class Solution {
30+
public int longestPalindrome(String s) {
31+
int[] array = new int[52];
32+
for(char c : s.toCharArray()){
33+
if(c <= 'Z'){
34+
array[c - 'A']++;
35+
}else{
36+
array[c - 'a' + 26]++;
37+
}
38+
}
39+
40+
int count = 0;
41+
boolean single = false;
42+
for(int num : array){
43+
count += (num >> 1);
44+
if((num & 1) == 1)
45+
single = true;
46+
}
47+
return single ? (count << 1) + 1 : (count << 1);
48+
}
49+
}
50+
```

0415-字符串相加.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# 字符串相加
2+
3+
## 题目描述
4+
5+
给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
6+
7+
注意:
8+
9+
1. `num1``num2` 的长度都小于 `5100`.
10+
2. `num1``num2` 都只包含数字 `0-9`.
11+
3. `num1``num2` 都不包含任何前导零。
12+
4. 你不能使用任何內建 `BigInteger` 库, 也不能直接将输入的字符串转换为整数形式。
13+
14+
## 分析
15+
16+
按位相加,注意进位。
17+
18+
## 算法
19+
20+
```java
21+
class Solution {
22+
public String addStrings(String num1, String num2) {
23+
StringBuilder sb = new StringBuilder();
24+
int carry = 0, i = num1.length()-1, j = num2.length()-1;
25+
while(i >= 0 || j >= 0 || carry != 0){
26+
if(i>=0) carry += num1.charAt(i--)-'0';
27+
if(j>=0) carry += num2.charAt(j--)-'0';
28+
sb.append(carry % 10);
29+
carry /= 10;
30+
}
31+
return sb.reverse().toString();
32+
}
33+
}
34+
```

0419-甲板上的战舰.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
# 甲板上的战舰
2+
3+
## 题目描述
4+
5+
给定一个二维的甲板, 请计算其中有多少艘战舰。 战舰用 `'X'` 表示,空位用 `'.'` 表示。 你需要遵守以下规则:
6+
7+
* 给你一个有效的甲板,仅由战舰或者空位组成。
8+
* 战舰只能水平或者垂直放置。换句话说,战舰只能由 `1xN` (1 行, N 列)组成,或者 `Nx1` (N 行, 1 列)组成,其中N可以是任意大小。
9+
* 两艘战舰之间至少有一个水平或垂直的空位分隔 - 即没有相邻的战舰。
10+
11+
```
12+
X..X
13+
...X
14+
...X
15+
在上面的甲板中有2艘战舰。
16+
17+
...X
18+
XXXX
19+
...X
20+
你不会收到这样的无效甲板 - 因为战舰之间至少会有一个空位将它们分开。
21+
```
22+
23+
## 分析
24+
25+
计数所有战舰的“左上角”。
26+
27+
## 算法
28+
29+
```java
30+
class Solution {
31+
public int countBattleships(char[][] board) {
32+
int boardRowSize = board.length, boardColSize = board[0].length;
33+
int count = 0;
34+
for(int i = 0; i < boardRowSize; ++i)
35+
for(int j = 0; j < boardColSize; ++j)
36+
if((board[i][j]=='X') &&
37+
(i == 0 || board[i-1][j] == '.') &&
38+
(j == 0 || board[i][j-1]=='.'))
39+
++count;
40+
return count;
41+
}
42+
}
43+
```

0 commit comments

Comments
 (0)