最近开始在 LeetCode 里面刷算法题,记录一下,代码在 github。
- 反转字符串
编写一个函数,其作用是将输入的字符串反转过来。
1
2
3
4
5
6
7
8
9public String reverseString(String s) {
char[] char1 = s.toCharArray();
int l = char1.length;
char[] char2 = new char[l];
for (int i = 0; i < l; i++) {
char2[i] = char1[l - i - 1];
}
return String.valueOf(char2);
} - 颠倒整数
给定一个 32 位有符号整数,将整数中的数字进行反转。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public int reverse(int x) {
if (x == 0) {
return x;
}
if (x > 0) {
String xString = String.valueOf(x);
String xStringReverse = reverseString(xString);
long xReverse = Long.valueOf(xStringReverse);
if (xReverse > 2147483647) {
return 0;
}
return (int) xReverse;
}
long y = 0 - (long)x;
String yString = String.valueOf(y);
String yStringReverse = reverseString(yString);
long yReverse = Long.valueOf(yStringReverse);
if (yReverse > 2147483647) {
return 0;
}
return (int) (0 - yReverse);
} - 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
1
2
3
4
5
6
7
8
9public int firstUniqChar(String s) {
char[] chars = s.toCharArray();
for (char c: chars) {
if (s.indexOf(c) == s.lastIndexOf(c)) {
return s.indexOf(c);
}
}
return -1;
} - 有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
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
29public boolean isAnagram(String s, String t) {
Map<Character, Integer> sMap = new HashMap<>();
for (char c: s.toCharArray()) {
if (sMap.containsKey(c)) {
int cCount = sMap.get(c) + 1;
sMap.replace(c, cCount);
} else {
sMap.put(c, 1);
}
}
for (char c: t.toCharArray()) {
if (sMap.containsKey(c)) {
int cCount = sMap.get(c) - 1;
if (cCount < 0) {
return false;
} else if (cCount == 0) {
sMap.remove(c);
} else {
sMap.replace(c, cCount);
}
} else {
return false;
}
}
if (sMap.size() > 0) {
return false;
}
return true;
} - 验证回文字符串
给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public boolean isPalindrome(String s) {
if (s.equals("")) {
return true;
}
List<Character> characterList1 = string2charList(s);
int l = characterList1.size();
for (int i = 0; i < l / 2; i++) {
if (characterList1.get(i) != characterList1.get(l - i - 1)) {
return false;
}
}
return true;
}
private List<Character> string2charList(String s) {
s = s.toLowerCase();
List<Character> characterList = new ArrayList<>();
for (char c: s.toCharArray()) {
if (Character.isLetter(c) || Character.isDigit(c)) {
characterList.add(c);
}
}
return characterList;
}
近期评论