【发布时间】:2023-01-11 03:18:36
【问题描述】:
在 Rust 中,我试图获得 a-z 字符的所有可能组合,直到固定长度且没有重复字母。
例如,对于一组有限的 a-f 和 3 的长度,我应该得到:
美国广播公司 abd 阿部 ABF 交流电 酸性 高手 活性碳纤维 亚行 ... ETC
我一直在努力通过递归来做到这一点,并且一直在努力解决所有权和借用问题。我设法做到这一点的唯一方法如下,但这是在各处克隆字符串并且效率非常低。标准库中可能有用于此的标准排列/组合函数,我不知道,但我有兴趣了解如何手动完成此操作。
fn main() {
run(&String::new());
}
fn run(target: &String) {
for a in 97..123 { // ASCII a..z
if !target.contains(char::from(a)) {
let next = target.clone() + char::from(a).to_string().as_str(); // Working but terrible
if next.len() == 3 { // Required string size
println!("{}", next);
} else {
run(&next);
}
}
}
}
任何帮助将非常感激。
【问题讨论】:
-
“在那个返回整数的字符串上调用另一个函数”- 细节?
-
有点太长无法详细解释,但它只是一个函数,它引用一个字符串并返回一个基于字符串内容的
i32。i32可能因字符串而异,我想找到它的最大值。 -
让我们移动“调用另一个函数”另一个问题的一部分。在 StackOverflow 上,每个帖子问一个问题是一种习惯。
-
好的,编辑以删除问题的第二部分。