【力扣-1668打卡】

package com.example.demomain.demoleetcode.easy;

import org.junit.jupiter.api.Test;

/**
 * 给你一个字符串 sequence ,如果字符串 word 连续重复 k 次形成的字符串是 sequence 的一个子字符串,
 * 那么单词 word 的 重复值为 k 。单词 word 的 最大重复值 是单词 word 在 sequence 中最大的重复值。
 * 如果 word 不是 sequence 的子串,那么重复值 k 为 0 。
 * <p>
 * 给你一个字符串 sequence 和 word ,请你返回 最大重复值 k 。
 * <p>
 * 示例 1:
 * <p>
 * 输入:sequence = "ababc", word = "ab"
 * 输出:2
 * 解释:"abab" 是 "ababc" 的子字符串。
 * 示例 2:
 * <p>
 * 输入:sequence = "ababc", word = "ba"
 * 输出:1
 * 解释:"ba" 是 "ababc" 的子字符串,但 "baba" 不是 "ababc" 的子字符串。
 * 示例 3:
 * <p>
 * 输入:sequence = "ababc", word = "ac"
 * 输出:0
 * 解释:"ac" 不是 "ababc" 的子字符串。
 * 提示:
 * <p>
 * 1 <= sequence.length <= 100
 * 1 <= word.length <= 100
 * sequence 和 word 都只包含小写英文字母。
 * Related Topics
 */
public class MaxRepeating {
    /**
     * java 11
     * @param sequence
     * @param word
     * @return
     */
    public int maxRepeatingJava11(String sequence, String word) {
        // k -> 可能最大重复次数
        for (int k = sequence.length() / word.length(); k > 0; --k) {
            // java 11 str.repeat(x) : 重复 x 次 ("ab".repeat(2)  -> "abab")
            if (sequence.contains(word.repeat(k))) {
                return k;
            }
        }
        return 0;
    }

    /**
     * 枚举
     * @param sequence
     * @param word
     * @return
     */
    public int maxRepeating(String sequence, String word) {
        int sqLen = sequence.length();
        int wordLen = word.length();
        // 可能最大重复次数
        int cnt = sqLen / wordLen;
        int maxRepeatCnt = 0;
        // 枚举
        String tmpWord = word;
        for (; maxRepeatCnt < cnt; maxRepeatCnt++) {
            if (sequence.indexOf(tmpWord) >= 0) {
                // word -> word
                tmpWord += word;
            } else {
                break;
            }
        }
        return maxRepeatCnt;
    }

    @Test
    public void test() {
/*        String sequence = "ababc";
        String word1 = "ab";
        System.out.println(maxRepeating(sequence, word1));

        String word2 = "ba";
        System.out.println(maxRepeating(sequence, word2));

        String word3 = "ac";
        System.out.println(maxRepeating(sequence, word3));*/

        String sequence1 = "aaabaaaabaaabaaaabaaaabaaaabaaaaba";
        String word4 = "aaaba";
        // System.out.println(maxRepeating(sequence1, word4));

        System.out.println(maxRepeatingJava11(sequence1, word4));
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冷风扇666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值