查找更长序列的序列的算法

时间:2016-04-05 21:30:29

标签: javascript algorithm

这是一个艰难的 我现在已经有一段时间没用了,所以现在我希望你们中的一些人能够知道答案。 我在这里有一个很长的数字:

122111312121142113121

没有数字高于4或低于1 现在我需要找出一个随机序列(随机数,但除了1-4之外的任何内容,以及随机长度)是否存在于该较长的数字内。
作为一个例子,我有序列 13121211 ,我需要找出它是否在上面的数组中(在这种情况下它是,但总有可能它不是!)。 不幸的是,我仅限于使用纯HTML和JavaScript,没有jQuery或任何像AngularJS这样的框架。 这个数字大约有600个字符,因此无需将所有数据输入数组即可获得解决方案! 我觉得应该有一个简单的方法来解决这个问题,但我无法弄清楚如何解决这个问题。

提前致谢! :)

4 个答案:

答案 0 :(得分:0)

你如何存储长号码?如果它是一个数字,那只是字符串转换的问题:

[1, 2, 3, 4, 5, 6].join(''); // -> "123456"
['1', '2', '3', '4', '5', '6'].join(''); // -> "123456"

如果你已经有了一个字符串,那就更容易了,但是同样的功能也可以。

如果你有一组字符或整数,只需使用join:

using System.Reflection;
using System.ComponentModel;
class MaskDictionary
{
    // ... properties ...

    public string ToString(string format)
    {
        string val = format;
        foreach (PropertyInfo property in typeof(MaskDictionary).GetProperties())
        {
            val = val.Replace("{" + property.Name + "}", property.GetValue(this).ToString());
        }
        return val;
    }
}

答案 1 :(得分:0)

使用string.indexOf(sequence),其中字符串和序列由您定义。如果返回-1,则序列不包含在字符串中。作为一个。 Chiesa提到,。indexOf()需要两个字符串,因此您可能需要使用.join()函数。

答案 2 :(得分:0)

如果我正确理解了这个问题,你只需在另一个内部寻找一个字符串。 JavaScript编号不允许600位数字,但这没关系,因为您还没有将其视为数字 - 只是一系列字符。

尝试这样的事情:

var number='122111312121142113121';
var search='13121211';
var position=number.indexOf(search);
if(position>-1) alert('Found at '+position);
else alert('Not Found');

indexOf方法正在完成所有艰苦的工作。索引-1表示失败,因为索引从零开始,这意味着第一个成功的位置是0

你在这个问题上避免使用jQuery of Angular是正确的,就像试图用热核装置破解核桃一样。

修改:现代 JavaScript有includes方法返回truefalse而不是位置。当然不是IE。

答案 3 :(得分:0)

这将生成随机字符串并在bigNumber中搜索它们。

minSubstr是我们检查的随机字符串的最小长度

maxSubstr是其最大长度

numTries是我们测试的随机字符串数量

所有匹配的字符串都被抛入我们的输出div。

Fiddle

<强> JS

var bigNumber = "122111312121142113121";    
var output = document.getElementById("output");    
var minSubstr = 4;
var maxSubstr = 6;
var numTries = 1000;

function findNumbers(){
  for(var i = 0; i < numTries; i++){
    var num = getRandNum();
    if(bigNumber.indexOf(num) !== -1) output.innerHTML += num + ' <br/>';
  }
}

function getRandNum(){
  var ret = '';
  var len = getRandom(minSubstr, maxSubstr);
  for(var i = 0; i < len; i++){
    ret += getRandom(1,4);
  }
  return ret;
}

function getRandom(min, max) {
  return Math.floor(Math.random() * (max - min + 1)) + min;
}

findNumbers();

<强> HTML

<div id="output"></div>