带有特殊字符和所有组合的字符串 我正在尝试在每个字符串中的每个字符后将给定字符串的所有可能组合与特殊的字符组合在一起。 给定: const messages = generateMessages(['test'],['。',','],3); 我所做的...

问题描述 投票:0回答:1

到目前为止,我做了什么:

function generateMessages(messages, specialChars, depth) { const generatedMessages = []; messages.forEach((message) => { for(let x = 0; x < message.length; x++) { specialChars.forEach((specialChar) => { let currentDepth = 1; while(currentDepth <= depth) { let temp = ''; temp += message.substring(0, x+1); // I think here is the problem! temp += generateSpecialChars(specialChar, currentDepth); temp += message.substring(x +1); generatedMessages.push(temp); currentDepth++; } }) } }) return generatedMessages; } function generateSpecialChars(char, depth) { let temp = ''; for (let i = 0; i < depth; i++) { temp += char; } return temp; }

电流输出:

[ 'T.est', 'T..est', 'T...est', 'T,est', 'T,,est', 'T,,,est', 'Te.st', 'Te..st', 'Te...st', 'Te,st', 'Te,,st', 'Te,,,st', 'Tes.t', 'Tes..t', 'Tes...t', 'Tes,t', 'Tes,,t', 'Tes,,,t', 'Test.', 'Test..', 'Test...', 'Test,', 'Test,,', 'Test,,,' ]

我想要的输出:

[
  'T.est', 'T..est', 'T...est',
  'Te.st', 'T.e.st', 'T..e.st', 'T...e.st',
  'Te..st', 'T.e..st', 'T..e..st', 'T...e..st',
  'Te...st', 'T.e..st', 'T..e...st', 'T...e...st',
  'Tes.t', 'T.es.t', 'T..es.t', 'T...es.t',
  'Te.s.t', 'T.e.s.t', 'T..e.s.t', 'T...e.s.t',
  ...
]

我还想将特殊字符结合起来,取决于深度: 假设深度为3,我们有特殊的chars [','''和'。] [ 'T.est', 'T..est', 'T...est', 'T.est', 'T..est', 'T..,est', 'T.est', 'T..est', 'T.,,est', 'T.est', 'T..est', 'T,,,est', 'T.est', 'T.,est', 'T,,,est', 'T.est', 'T,,est', 'T,,,est', 'T,est', 'T,,est', 'T,,,est', ... ]

有人可以帮我吗?

要生成字符串与特殊字符的所有可能组合,您可以使用两步方法:

您需要编写一个可以创建所有不同方式的函数 将特殊字符与给定的次数结合在一起。为了 例如,如果您有两个特殊字符,“,”和“。”,而您 想要将它们组合三遍,您可以得到这些组合: “ ,,”,“,”,“,”,“,”,“。 您需要编写另一个功能,该功能可以在字符串中的每个字符之后插入这些特殊字符的组合。为了 例如,如果您具有字符串“测试”和组合“ ..”,则可以在每个字符之后插入它,然后获取“ t ..,est”,“ TE ..,st”, “ tes ..,t”,“测试..”

javascript
1个回答
1
投票
但此代码存在问题。它不会使所有 混合字母和特殊字符的可能方法。它错过了 某些方式,例如“ t.est”。问题是第二个功能确实 在单词中的一封信之后,不要尝试什么。它只是试图 放置一个或多个特殊字符,达到一定限制。修复 这,您需要稍微更改第二个功能。你需要 添加另一种方式再次调用该功能,而无需放置任何 信后的特殊人物。

例如:
function generateSpecialChars(specialChars, length) { if (length === 0) { return [""]; } if (length === 1) { return specialChars; } const combinations = []; specialChars.forEach((specialChar) => { const subCombinations = generateSpecialChars(specialChars, length - 1); subCombinations.forEach((subCombination) => { combinations.push(subCombination + specialChar); }); }); return combinations; } function generateMessages(messages, specialChars, depth) { const generatedMessages = []; messages.forEach((message) => { generateHelper(message, 0, "", specialChars, depth, generatedMessages); }); return generatedMessages; } function generateHelper(message, index, prefix, specialChars, depth, output) { if (index >= message.length) { output.push(prefix); return; } const char = message[index]; generateHelper( message, index + 1, prefix + char, specialChars, depth, output ); let repeat = 1; while (repeat <= depth) { const repeatedChars = generateSpecialChars(specialChars, repeat); repeatedChars.forEach((repeatedChar) => { generateHelper( message, index + 1, prefix + char + repeatedChar, specialChars, depth, output ); }); repeat++; } } const messages = generateMessages(["Test"], [".", ","], 3); console.log(messages)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.