【发布时间】:2018-09-28 06:27:56
【问题描述】:
给定一个字符串和一个非空子字符串,递归计算以该子字符串开头和结尾的最大子字符串并返回其长度。
我所做的没有返回正确的长度。但是因为我已经保存了所有可能的子字符串,所以我可以确定长度。时间复杂度应该是线性的:O(n)。
这是我尝试过的:
public class StringPatternMatcher {
static String[] array = new String[10];
static int n = 0;
public static int findSubString ( String s, String pat) {
if ( s.length() < pat.length() ) {
return 0;
}
else {
return s.indexOf(pat);
}
}
public static int findMaxSubstring ( String s, String pat) {
if ( s.length() < pat.length() ) {
return 0;
}
else if ( s.startsWith(pat, 0)){
int idx = findSubString( s.substring(pat.length()), pat );
if ( idx == -1 || idx == 0 ) {
return -1;
}
array[n++] = s.substring(pat.length(), pat.length() + idx);
return findMaxSubstring( s.substring(pat.length()), pat);
}
else {
return 1 + findMaxSubstring( s.substring(1), pat);
}
}
public static void main(String[] args) {
String s = "catwomencatwhiskerscat";
System.out.println("Count is : " + findMaxSubstring( s, "cat"));
for ( String str : array) {
if (str != null )
System.out.println("The string is:" + str + " and it's len is: " + str.length());
}
}
}
【问题讨论】: