LeetCode -- Google -- Interview Process. 1. Repeated String Match(java)

Given two strings A and B, find the minimum number of times A has to be repeated such that B is a substring of it. If no such solution, return -1.

For example, with A = “abcd” and B = “cdabcdab”.

Return 3, because by repeating A three times (“abcdabcdabcd”), B is a substring of it; and B is not a substring of A repeated two times (“abcdabcd”).

Note:
The length of A and B will be between 1 and 10000.
思路:首先判断s和t的长度,1. 如果s.length >= t.length, 那么就看s中有没有包含t,如果包含了,则返回1,如果没包含,s最多重复一次就可以看出包含关系,重复后包含则返回2,不包含则返回-1;2. 如果s.length < t.length,重复s足够多次(h次),如果s包含t, 则返回重复的次数,如果s不包含t,则返回-1,至于h的取值,取决于s的首尾的情况,如果s中重复的t的字段以外,首尾有多余的则重复次数+2,首尾有一方多余的+1,首尾都不多余为t重复的次数。

public int repeatedStringMatch(String A, String B) {
        String s = A, t = B;
        int sl = s.length(), tl = t.length();
        if (sl == 0 || tl == 0) return -1;
        if (sl < tl) {
            int index = t.indexOf(s), j = sl - 1, h = 0;
            if (index > 0) {
                if (!t.substring(tl - sl).equals(s)){
                    h = (tl - index) / sl + 2;
                } else {
                    h = (tl - index) / sl + 1;
                }
            }else {
                if (tl % sl != 0) {
                    h = tl / sl + 1;
                } else {
                     h = tl / sl;
                }
            }
            String str = "";
            for (int i = 0; i < h; i++) {
                str += s;
            }
            if (str.indexOf(t) == -1) return -1;
            else return h;

        } else {
            if (s.indexOf(t) != -1) return 1;
            String repeat = s + s;
            if (repeat.indexOf(t) == -1) return -1;
        else return 2;
    }
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值