在字符串中寻找长度为k且包含重复字符的子串
(牛客网—牛客题霸算法篇—NC179)
题目描述
给一个由小写字母组成的长度为n的字符串 s ,找出所有长度为 k 且包含重复字符的子串,返回全部满足要求的子串的数目。
思路
Java实现
通过三层循环实现:
最外层循环用于确定每个子串的开头位置,从i位置取k个字符。
第二层和最内层循环用于比较所截取子串中是否含有重复的字符串。
当出现重复的字符串时,令flag=true(flag用于标识是否有重复的字符)
flag用于验证是否含有重复的字符,若含有则跳出循环,否则的话继续。
当flag=true时,说明截取的字符串中含有重复的字符,跳出当前子串的验证,并且直接让count++,防止子串中有多个相同的字符。
代码实现
import java.util.*;
public class Solution {
public int numKLenSubstrRepeats (String s, int k) {
// write code here
int count=0;
boolean flag=false;
for(int i=0;i<=s.length()-k;i++){
for(int j=i;j<i+k;j++){
for(int m=1;m<k+i-j;m++){
if(s.charAt(j)==s.charAt(j+m)){
flag=true;
break;
}
}
if(flag)
break;//直接跳出当前子串的验证,防止子串中有多个相同的字符。
}
if(flag==true){
count++;
flag=false;
}
}
return count;
}
}