给定两个长度小于1000的非空字符串str1和str2字符串中只包含小写字母如果str2是str1的子串请你返回str1中包含多少个子串str2如果str2不是str1的子串则返回0。用java实现。
可以使用一个双重循环来实现:
public static int countSubstring(String str1, String str2) {
int count = 0;
for (int i = 0; i < str1.length(); i++) {
for (int j = 0; j < str2.length(); j++) {
if (i + j >= str1.length() || str1.charAt(i + j) != str2.charAt(j)) {
break;
}
if (j == str2.length() - 1) {
count++;
}
}
}
return count;
}
其中,外层循环遍历str1中的每个字符,内层循环遍历str2中的每个字符,如果str1中当前位置和str2中当前位置不同,则直接退出内层循环;如果内层循环遍历到了str2的末尾,说明str2是str1的子串,将计数器加一。最终返回计数器的值即可。
另外,如果使用Java8及以上版本可以使用Stream API来实现:
public static long countSubstring(String str1, String str2) {
return IntStream.range(0, str1.length() - str2.length() + 1)
.filter(i -> str1.substring(i, i + str2.length()).equals(str2))
.count();
}
其中,使用IntStream.range生成一个从0到(str1.length()-str2.length()+1)的整数流,然后使用filter过滤出str2是str1子串的位置,最后使用count方法得到计数器的值
原文地址: https://www.cveoy.top/t/topic/hf8m 著作权归作者所有。请勿转载和采集!