首页 > 试题广场 >

MagicString

[编程题]MagicString
  • 热度指数:529 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛妹有有两个字符串,她想知道中的哪一个循环同构串中的出现次数最多,如果有多个,请输出字典序最小的一个。

循环同构串的定义:不断地将的部分提前到之前,得到一个新的字符串,这些新的字符串称为循环同构串。
例:的循环同构串为:,,,


如果没有在的任意一个循环同构串中出现则返回
否则返回字符串代表答案。

示例1

输入

"aaabaaa","aaaa"

输出

"aaaaaab"

说明

包含 次并且字典序最小

备注:
包括,只由小写字母构成
呃,这里题都没人做吗,不通过用例也不提示
public class Solution {
    /**
     * 
     * @param S1 string字符串 S1
     * @param S2 string字符串 S2
     * @return string字符串
     */
    public String CycleString (String S1, String S2) {
        if (!S1.equals(S1.toLowerCase()) || !S2.equals(S2.toLowerCase()) || S1.length() < 1 || S2.length() < 1
            || S1.length() > 100000 || S2.length() > 100000) {
            return "IMPOSSIBLE";
        }
        int len = S1.length();
        S1 = S1 + S1 + S1;
        int star = S1.indexOf(S2);
        if (star < 0)
            return "IMPOSSIBLE";
        int end = star + S2.length();
        int i = star + len;
        int t = i;
        int cc=0;
        int maxC = 0;
        while (i >star) {
            i--;

            if(cc>maxC && i==end){
                t = i;
            }
            if(i>star && i<end){
                continue;
            }
            char j = S1.charAt(i);
            if (j < S1.charAt(t) ) {
                t = i;
            }
            else if(j == S1.charAt(t)){
                cc++;
            }  else{
                if(cc>maxC && i>star){
                    maxC=cc;
                    t = i+1;
                }
                cc=0;
            }
        }
        return S1.substring(t, t + len);
    }
}


发表于 2020-09-24 14:11:23 回复(0)

问题信息

难度:
1条回答 5583浏览

热门推荐

通过挑战的用户

查看代码