题目
1.1592. 重新排列单词间的空格
2.1593. 拆分字符串使唯一子字符串的数目最大
思路与算法
- 第一题注意分割用的正则表达式别出错,其余的按照题意进行分割就可以了。
- 第二题典型的dfs回溯模板题,不再赘述,见代码
代码实现
1.1592. 重新排列单词间的空格
class Solution {
public String reorderSpaces(String text) {
String[] split = text.trim().split(" +");
if (split.length == 0) return text;
int count = 0;
StringBuilder sb = new StringBuilder();
StringBuilder sbSpace = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
if (text.charAt(i) == ' ') count++;
}
if (split.length == 1) {
sb.append(split[0]);
while (count-- > 0) sb.append(' ');
return sb.toString();
}
int div = count / (split.length - 1);
while (div-- > 0) sbSpace.append(' ');
String s = sbSpace.toString();
for (int i = 0; i < split.length; i++) {
sb.append(split[i]);
if (i < split.length - 1) sb.append(s);
}
int lastSpace = count % (split.length - 1);
while (lastSpace-- > 0) sb.append(' ');
return sb.toString();
}
}
2.1593. 拆分字符串使唯一子字符串的数目最大
class Solution {
int max = 1;
Set<String> set = new HashSet<>();
public int maxUniqueSplit(String s) {
dfs(s, 0);
return max;
}
private void dfs(String s, int start) {
if (s.length() == start) {
max = Math.max(set.size(),max);
return;
}
for (int end = start + 1; end <= s.length(); end++) {
String substring = s.substring(start, end);
if (!set.contains(substring)) {
set.add(substring);
dfs(s, end);
set.remove(substring);
}
}
}
}
写在最后
今年内卷可太离谱了,加油啊!