-1

我想知道如何在不使用任何内置 JAVA 字符串函数的情况下计算字符串中特定子字符串的出现次数。例如:

InputString = "knowbutuknow"
subString = "know"

程序应将结果返回为 2。

编辑:重新表述我的问题。这是我遇到的面试问题之一。

编辑:这里可以使用 charAt 和 length 等基本字符串函数。

4

1 回答 1

1

假设您已经知道要搜索的关键字:

  • 从输入字符串的字符“0”开始
  • 迭代直到“length - keyWordLength”(长度为 4 的关键字不能匹配到最后 3 个字符)
  • 内部:从 0 迭代到 keyWord.length -1 并始终比较:
  • 外部循环位置的字符加上输入字符串的内部循环的位置以及关键字的“内部循环”位置的字符。
  • 如果找到匹配项,则继续使用内循环,如果不匹配,则通过简单地“破坏”内循环来推进外循环。
  • 如果您有一个匹配项,并且完全处理了内部循环,那么您就有了该关键字的匹配项。

像这样的东西。我假设String.length被允许。否则,您需要创建自己的 strlen 函数。(这可以通过forach循环和简单的“向上”计数来实现)

这是未经测试的,可能无法开箱即用,但应该给你一个简短的想法。

String inputString = "knowbutuknow";
String subString = "know";

int matches = 0;
for (int outer = 0; outer <= inputString.length() - subString.length(); outer++){
  for (int inner = 0; inner < subString.length(); inner++){
    if (inputString.charAt(outer + inner) == subString.charAt(inner)){
      // letter matched, proceed.
      if (inner == subString.length()-1){
        //last letter matched, so a word match at position "outer"
        matches++;
        //proceed with outer. Room for improvement: Skip next n chars beeing
        // part of the match already.
        break;
      } 
    }else{
      //no match for "outer" position, proceed to next char.
      break;
    }
  }
} 

编辑:对不起,混合了一些 php :) 修复了它。

于 2013-10-19T23:10:32.767 回答