解题思路
这是一个字符串组合问题,需要找出所有相邻字符的组合。关键是要理解"相邻"的含义,并注意去重和排序要求。
关键点:
- 只能组合相邻的字符
- 需要按照长度和字典序排序
- 需要去重
- 输出时用空格分隔
算法步骤:
- 获取所有可能长度的子串
- 对每个长度的子串进行去重和排序
- 按长度和字典序输出结果
代码
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string solve(string s) {
// 使用set自动去重
set<string> combinations;
int n = s.length();
// 枚举所有可能的长度
for (int length = 1; length <= n; length++) {
// 获取所有长度为length的子串
for (int start = 0; start <= n - length; start++) {
combinations.insert(s.substr(start, length));
}
}
// 按长度排序
vector<string> result;
map<int, vector<string>> lengthMap;
for (const string& str : combinations) {
lengthMap[str.length()].push_back(str);
}
// 构建结果字符串
string answer;
for (const auto& pair : lengthMap) {
for (const string& str : pair.second) {
if (!answer.empty()) answer += " ";
answer += str;
}
}
return answer;
}
};
int main() {
string s;
getline(cin, s);
Solution solution;
cout << solution.solve(s) << endl;
return 0;
}
import java.util.*;
public class Main {
public String solve(String s) {
// 使用TreeSet自动去重和排序
Set<String> combinations = new TreeSet<>((a, b) -> {
if (a.length() != b.length()) {
return a.length() - b.length();
}
return a.compareTo(b);
});
int n = s.length();
// 枚举所有可能的长度
for (int length = 1; length <= n; length++) {
// 获取所有长度为length的子串
for (int start = 0; start <= n - length; start++) {
combinations.add(s.substring(start, start + length));
}
}
return String.join(" ", combinations);
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine().trim();
Main solution = new Main();
System.out.println(solution.solve(s));
sc.close();
}
}
``` []
def solve(s: str) -> str:
# 存储所有长度的组合
combinations = set()
n = len(s)
# 枚举所有可能的长度
for length in range(1, n + 1):
# 获取所有长度为length的子串
for start in range(n - length + 1):
combinations.add(s[start:start + length])
# 按长度和字典序排序
result = sorted(list(combinations), key=lambda x: (len(x), x))
return ' '.join(result)
# 读取输入
s = input().strip()
print(solve(s))
算法及复杂度
时间复杂度
- 生成所有子串:,其中 是字符串长度
- 排序:,因为最多有 个子串
- 总时间复杂度:
空间复杂度
- 存储所有子串:
- 总空间复杂度: