到目前为止,我做了什么:
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”,“测试..”
例如:
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)