任务如下:找出PATTERN中的文本在text中重复了多少次。重复可能相互重叠。我们建议循环遍历TEXT中PATTERN可以开始的所有可能位置。在迭代时,检查循环中的每个位置,遍历PATTERN中的字符和从被迭代位置出发的字符。如果在检查过程中至少有一个字符不匹配,则位置不合适,我们继续进行下一个字符。否则,需要增加重复次数。
我理解,为了找出哪个字符在字符串中的第I个位置,使用charAt(I)方法,每个string类型的对象都有。
但具体是什么,我却想不起来
public class Main {
public static final String TEXT = "aaababaabaaaabaabaabaabaaababaabaaababaabaaaabaabaabaabbabaabaaababaababaabaabaabaaabbaab";
public static final String PATTERN = "aab";
public static void main(String[] args) {
int count = 0;
for (int i = 0; i < TEXT.length(); i++) {
int count = 1;
}
System.out.println("String " + PATTERN + " met in the text " + count + " times");
}
}
对于TEXT
的每个i
位置,如果它们与模式字符匹配,则需要查看n(模式长度)字符,对它们使用迭代
int count = 0;
boolean positionOk;
for (int i = 0; i < TEXT.length(); i++) {
positionOk = true;
for (int j = 0; j < PATTERN.length(); j++) {
if (TEXT.charAt(i + j) != PATTERN.charAt(j)) {
positionOk = false;
break;
}
}
if (positionOk) {
count += 1;
}
}
如果你不需要迭代,你可以使用String.startsWith(word, position)
for (int i = 0; i < TEXT.length(); i++) {
if (TEXT.startsWith(PATTERN, i)) {
count += 1;
}
}
@azro的回答也可以写成:
int count = 0;
L: for (int i = 0; i < TEXT.length(); i++) {
for (int j = 0; j < PATTERN.length(); j++) {
if (TEXT.charAt(i + j) != PATTERN.charAt(j)) {
continue L;
}
}
count++;
}