如何用特定字符的索引搜索特定单词的索引

时间:2018-08-03 08:50:15

标签: javascript algorithm search

比如说我下面有这个词

THIS TEXT IS A SAMPLE TEXT

我得到了字符索引7。

然后,当我将句子拆分成单词时,我必须返回索引1,该单词是包含字符索引的单词的索引,而不是5,该单词与组成字符索引的单词完全匹配,但与正确地构成字符索引的单词不匹配说谎。

基本上,我试图返回字符所在位置(拆分为单词时)和字符索引(拆分为字符时)的正确单词索引

我以为我会用下面的东西来重建单词,以便在字符处找到单词

let curString = 'find a word from here';
let initialPositin = 5
let position = initialPositin

let stringBuilder = '';

while(position > -1 && curString.charAt(position) !== ' '){
  console.log('run 1')
  console.log(position);

  stringBuilder = curString.charAt(position) + stringBuilder;

  position --;
}

console.log(stringBuilder)

position = initialPositin + 1;

while(position < curString.length && curString.charAt(position) !== ' '){
  console.log('run 2')

  stringBuilder += curString.charAt(position);

  position ++;
}

console.log(stringBuilder);

然后将句子拆分为单词,然后找到包含我构建的单词的单词的所有索引。然后遍历所有找到的单词并重构先前的单词,以查看重构中目标字符的索引是否与给定的字符位置匹配。

它真的没有效率。有谁有更好的建议?

我更喜欢javascript,但我可以尝试自己翻译其他任何语言

5 个答案:

答案 0 :(得分:3)

我认为您可以只计算给定索引之前出现的空间,例如

let curString = 'find a word from here';
let givenIndex = 9;

let spaceIndex = 0;
for (var i = 0; i < curString.length; i++) {
  if(curString.charAt(i) == ' ') {
      if (i < givenIndex) {
          spaceIndex++;
      } else {
          // found what we need
          console.log(spaceIndex);
      }
  }
}

答案 1 :(得分:0)

也许您可以构建一个返回所有空格位置的函数。 然后,您可以查看字符索引在该空格位置列表中的适合位置。

答案 2 :(得分:0)

text = "THIS TEXT IS A SAMPLE TEXT"
indexes = []
current_word = 0

for i in range(0, len(text)):

    if text[i] == ' ':
        current_word += 1  # After a ' ' character, we passed a word
    else:
        indexes.append(current_word)  # current character belongs to current word

您可以使用这段代码(用Python3编写)一次构建索引数组,然后将其用于每个索引。如果您还想在索引数组中计算''字符,则可以简单地将它们添加到for循环中(在if语句中)。

答案 3 :(得分:0)

我最终使用了以下代码

let dataid = infosStructured.filter((elm) => elm.identifiant == this.dataService.getcurrentId());
console.log(dataid);

工作非常好

答案 4 :(得分:0)

就像@miradham的答案一样,此函数对给定索引之前的空格进行计数,但是具有内置函数来对字符出现进行计数。

function wordIndexOfCharacterIndexInString(index, string) {
  const stringUpToCharacter = string.slice(0, index)
  return (stringUpToCharacter.match(/ /g) || []).length
}

console.log(wordIndexOfCharacterIndexInString(7, "THIS TEXT IS A SAMPLE TEXT"))