在字符串中寻找长度为k且包含重复字符的子串(Java)

此篇博客介绍了如何使用Java实现一个算法,解决牛客网NC179问题:在给定的小写字母字符串中,找到所有长度为k且包含重复字符的子串,提供了三层循环的详细步骤和代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在字符串中寻找长度为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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值