我想生成给定字符串的所有辅音。
Consonance is a stylistic literary device identified by the repetition of identical or similar consonants in neighboring words whose vowel sounds are different. (Wikipedia)
一个consonant是字母表中的一个字母,表示辅音。 下表同化了英语辅音组,并利用以下便利性使事情变得简单(主义):
- 它会忽略连字符(“sh”、“ch”、“th”等)。
- 它忽略元音。
- 它会忽略“h”、“y”、“w”、“x”。
- 它假定给定的字母只能是一个辅音组的成员。因此,“c”(随机)与“s”和“z”放在一起,“g”与“j”放在一起。
我们还假设允许符合情况 2 和 3 的输入,并且应该简单地忽略它。但是,如果输入符合情况 1,或者破坏了情况 4,则该输入无效(请参阅下面的示例)。
所以:
var consonants = [
['b', 'p'],
['c', 's', 'z'],
['d', 't'],
['f', 'v'],
['g', 'j'],
['k', 'q']
];
作为示例,给定字符串 "jedi"
,输出应该是:
var consonances = ["gedi", "jeti", "geti"]
请注意,“e”和“i”——元音(第 2 种情况)——可以作为输入。
其他一些例子:
"btb" --> ["ptb", "pdb", "pdp", "bdb", "bdp", "btp", "ptp"]
"star" --> ["ctar", "ztar", "sdar", "cdar", "zdar"]
输入无效:
- 图表:
"show", "chair", "high", "the"
- 重大案例 4:
"sure", "cat", "good"
我在寻找解决问题的方法时遇到了困难。我经历了排列问题,因为我猜它们可能与这里相关,但我不知道如何在这里应用这样的解决方案。
我需要一个算法,但当然,完整的代码解决方案会很好。 我将在这里添加我目前剩下的内容(JS 代码):
const irrelvant = ['a', 'e', 'i', 'o', 'u', 'h', 'y', 'w', 'x'];
function isConsonant(c) {
return !irrelvant.includes(c);
}
function getConsonants(c) {
let curConsonants = [];
consonants.every((group) => {
if (group.includes(c)) {
curConsonants = group;
};
return !curConsonants.length;
});
return curConsonants;
}
最佳答案
我建议在 map 中组织相关辅音:
var consonants = {
"b": "p",
"p": "b",
"c": "sz",
"s": "cz",
"z": "cs",
"d": "t",
"t": "d",
"f": "v",
"v": "f",
"g": "j",
"j": "g",
"k": "q",
"q": "k",
];
现在您可以逐个字符地迭代字符串。如果您在映射中击中一个字符,请考虑在 pos 处插入的映射字符串中的每个字符所更改的单词(除了您所做的未更改的递归之外)。伪代码:
function generate(word, pos) {
if (pos == word.length) {
console.log(word);
return;
}
generate(word, pos + 1);
mapped = consonants[word.charAt(pos)];
if (mapped != null) {
var prefix = word.substring(0, pos);
var suffix = word.substring(pos + 2);
for (var i = 0; i < mapped.length; i++) {
var changed = prefix + mapped.charAt(i) + suffix;
geneate(changed, pos + 1);
}
}
}
关于javascript - 生成字符串的所有辅音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52505840/