我有以下函数从JavaScript中的字符串中获取所有子字符串。我知道这不正确,但我觉得我正在以正确的方式去做。任何建议都会很棒。
var theString = 'somerandomword',
allSubstrings = [];
getAllSubstrings(theString);
function getAllSubstrings(str) {
var start = 1;
for ( var i = 0; i < str.length; i++ ) {
allSubstrings.push( str.substring(start,i) );
}
}
console.log(allSubstrings)
编辑:如果我的问题不清楚,请道歉。通过子串我的意思是字符串中所有字母的组合(不必是实际的单词)所以如果字符串是&#39; abc&#39;你可以[a,ab,abc,b,ba,bac等...]谢谢你的回复。
答案 0 :(得分:10)
您需要为子字符串设置两个嵌套循环。
function getAllSubstrings(str) {
var i, j, result = [];
for (i = 0; i < str.length; i++) {
for (j = i + 1; j < str.length + 1; j++) {
result.push(str.slice(i, j));
}
}
return result;
}
var theString = 'somerandomword';
console.log(getAllSubstrings(theString));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:0)
已接受答案的修改版本。为了给出最小的排列字符串长度
function getAllSubstrings(str,size) {
var i, j, result = [];
size = (size || 0);
for (i = 0; i < str.length; i++) {
for (j = str.length; j-i>=size; j--) {
result.push(str.slice(i, j));
}
}
return result;
}
var theString = 'somerandomword';
console.log(getAllSubstrings(theString,6));
答案 2 :(得分:0)
以下是该问题的递归解决方案
let result = [];
function subsetsOfString(str, curr = '', index = 0) {
if (index == str.length) {
result.push(curr);
return result;
}
subsetsOfString(str, curr, index + 1);
subsetsOfString(str, curr + str[index], index + 1);
}
subsetsOfString("somerandomword");
console.log(result);
答案 3 :(得分:0)
function getSubstrings(s){
//if string passed is null or undefined or empty string
if(!s) return [];
let substrings = [];
for(let length = 1 ; length <= s.length; length++){
for(let i = 0 ; (i + length) <= s.length ; i++){
substrings.push(s.substr(i, length));
}
}
return substrings;
}