获取JavaScript中字符串的所有子字符串

时间:2016-11-26 13:23:48

标签: javascript

我有以下函数从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等...]谢谢你的回复。

4 个答案:

答案 0 :(得分:10)

您需要为子字符串设置两个嵌套循环。

&#13;
&#13;
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;
&#13;
&#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;
}