文章目录
- 题目:最大重复子字符串
- 题解
- 题目: 面试题 16.07. 最大数值
- 题解
- 题目: 最大字符串配对数目
- 题解
- 题目: 字符串中第二大的数字
- 题解
- 总结
题目:最大重复子字符串
原题链接:最大重复子字符串
题解
方法:暴力延长word的重复次数并比较
,用contains()函数
public static int maxRepeating(String sequence, String word) {
int maxRepeat = 0;
StringBuilder repeatedWord = new StringBuilder(word);
// 循环尝试增加word的重复次数,直到不再是子字符串
while (sequence.contains(repeatedWord)) {
maxRepeat++;
repeatedWord.append(word);
}
return maxRepeat;
}
题目: 面试题 16.07. 最大数值
原题链接: 面试题 16.07. 最大数值
题解
方法:通过计算两个整数差值的符号位
表达式 a * (1 - sign) + b * sign
能够实现两个值的二选一效果
public int maximum(int a, int b) {
long diff = (long)a - (long)b;
long sign = (diff >>> 63) & 1;
return (int)(a * (1 - sign) + b * sign);
}
题目: 最大字符串配对数目
原题链接: 最大字符串配对数目
题解
public static int maximumNumberOfStringPairs(String[] words) {
HashSet<String> set = new HashSet<>();
int count = 0;
for (String word : words) {
String reversed = "" + word.charAt(1) + word.charAt(0);
// 检查反转字符串是否已经存在于 set 中
if (set.contains(reversed)) {
count++;
}
set.add(word);
}
return count;
}
题目: 字符串中第二大的数字
原题链接: 字符串中第二大的数字
题解
方法1:
public static int secondHighest(String s) {
Set<Integer> set = new HashSet<>();
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) {
set.add(c - '0');
}
}
int firstMax = -1;
int secondMax = -1;
for (Integer i : set) {
if (i > firstMax) {
secondMax = firstMax;
firstMax = i;
} else if (i > secondMax && i < firstMax) {
secondMax = i;
}
}
return secondMax;
}
方法2:
先找到最大值删除,如果set不为空,继续寻找最大值(答案)
public static int secondHighest11(String s) {
Set<Integer> set = new HashSet<>();
for (char c : s.toCharArray()) {
if (Character.isDigit(c)) {
set.add(c - '0');
}
}
int maxValue = -1;
for (Integer i : set) {
if (i > maxValue) {
maxValue = i;
}
}
set.remove(maxValue);
if (set.size() == 0) return -1;
maxValue = -1;
for (Integer i : set) {
if (i > maxValue) {
maxValue = i;
}
}
return maxValue;
}
总结
- 拿到一个题目要
认真读题
(建议读2遍),没思路可以看一下提示,有时候提示会给你一些解题思路的 - 不要被给的输入输出示例迷惑了,有时候会干扰你解题的