【问题标题】:Get all substrings of a string in JavaScript在 JavaScript 中获取字符串的所有子字符串
【发布时间】:2016-11-26 13:23:47
【问题描述】:

我有以下函数可以从 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)

编辑:如果我的问题不清楚,请道歉。子字符串是指字符串中所有字母的组合(不必是实际单词)所以如果字符串是'abc',你可以有[a,ab,abc,b,ba,bac等......]谢谢对于所有的回应。

【问题讨论】:

  • “所有”子字符串是什么意思?
  • 你期望什么输出?
  • 目前还不清楚“子字符串”是什么意思。如果您试图将每个单词作为其自己的值,则必须将字符串专门拆分为 A、B、C。但是如果该单词不是“somerandomword”怎么办?他们要么必须使用字典,要么必须使用您希望函数分割的另一个单词数组。这些词中的每一个都不能定义为“词”。
  • 我想知道,'bac' 是 'abc' 的子串吗?!

标签: javascript


【解决方案1】:

子字符串需要两个嵌套循环。

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));
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 此解决方案仅给出字符串的一部分,但不对其进行排列。
  • 这不会产生每个可能的子字符串,如“os”。它只会向右移动。
  • @Badmaash,你想换成所有字符的排列吗?
  • 不是我,但我认为这正是提问者正在寻找的。看看他的编辑:)
  • @Badmash 仅从左到右
【解决方案2】:

已接受答案的修改版本。为了给出置换的最小字符串长度

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));

【讨论】:

    【解决方案3】:

    以下是问题的递归解决方案

    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);

    【讨论】:

      【解决方案4】:

      使用子字符串函数的答案。

      function getAllSubstrings(str) {
        var res = [];
        for (let i = 0; i < str.length; i++) {
          for (let j = i + 1; j <= str.length; j++) {
            res.push(str.substring(i, j));
          }
        }
        return res;
      }
      var word = "randomword";
      console.log(getAllSubstrings(word));

      【讨论】:

        【解决方案5】:

        下面是查找所有子字符串的简单方法

        
            var arr = "abcde";
        
             for(let i=0; i < arr.length; i++){
        
              for(let j=i; j < arr.length; j++){
        
              let bag ="";
              for(let k=i; k<j; k++){
               bag+ = arr[k]
            }
            console.log(bag)
          }
        }
        

        【讨论】:

          【解决方案6】:
          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;
          }
          

          【讨论】:

            猜你喜欢
            • 2012-09-14
            • 2021-03-30
            • 1970-01-01
            • 2013-11-07
            • 2016-08-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-04-23
            相关资源
            最近更新 更多