javascript - 生成字符串的所有辅音

标签 javascript algorithm

我想生成给定字符串的所有辅音。

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是字母表中的一个字母,表示辅音。 下表同化了英语辅音组,并利用以下便利性使事情变得简单(主义):

  1. 它会忽略连字符(“sh”、“ch”、“th”等)。
  2. 它忽略元音。
  3. 它会忽略“h”、“y”、“w”、“x”。
  4. 它假定给定的字母只能是一个辅音组的成员。因此,“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"]

输入无效:

  1. 图表:"show", "chair", "high", "the"
  2. 重大案例 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/

相关文章:

javascript - foreach 和 JavaScript

javascript - 针对字符串/对象进行测试

javascript - 如何在 Wicket FeedbackPanel 的 info()/error() 方法上调用 Javascript 方法?

c# - 夜间检查功能 c#

javascript - 后台脚本中的 Chrome 扩展程序 : using document. querySelector

Javascript 标签在 HTML 中不起作用

algorithm - 动态简单多边形三角剖分

php - 递归地或通过迭代从表中检索数据——作为谱系树

algorithm - 问题计算角度

algorithm - Scala 中用于链表链接的尾递归解决方案