【2020牛客多校一:字符串】F :Infinite String Comparision

入口

【难度】

1/10
签到题

【题意】

给定一个字符串x,定义 x ∞ = x x x ⋯ \pmb{x^\infty=xxx\cdots} x=xxxx=xxxx=xxx
你有两个字符串a,b
请你比较 a ∞ 和 b ∞ a^\infty和b^\infty ab字典序的大小

【数据范围】

1 ≤ ∣ a ∣ , ∣ b ∣ ≤ 1 0 5 1\le|a|,|b|\le10^5 1a,b105

【样例输入】

aa
b
zzz
zz
aba
abaa

【样例输出】

<
=
>

【思路】

根据 P e r i o d i c i t y   L e m m a \pmb{Periodicity\ Lemma} Periodicity LemmaPeriodicity LemmaPeriodicity Lemma,我们只要让字符串 a a a b b b变成串 a a aa aa与串 b b bb bb
然后 max ⁡ ( ∣ a a ∣ , ∣ b b ∣ ) \max(|aa|,|bb|) max(aa,bb)作为比较的次数
每次比较后两个指针向后移位,若移动到末尾则即变为开头指针,用取模操作模拟
然后即可从左到右比较字典序大小。若还没比出大小,则两个无穷字符串字典序相同

【AC核心代码】
时间复杂度O( 2 max ⁡ ( ∣ a ∣ , ∣ b ∣ ) 2\max(|a|,|b|) 2max(a,b))
空间复杂度O(|a|+|b|)

/*
 _            __   __          _          _
| |           \ \ / /         | |        (_)
| |__  _   _   \ V /__ _ _ __ | |     ___ _
| '_ \| | | |   \ // _` | '_ \| |    / _ \ |
| |_) | |_| |   | | (_| | | | | |___|  __/ |
|_.__/ \__, |   \_/\__,_|_| |_\_____/\___|_|
        __/ |
       |___/
*/
string s1,s2;
int main()
{
    ///IOS;
    while(cin >> s1 >> s2){
        int pd=0;
        int ed1=s1.size();
        int ed2=s2.size();
        int ed = 2*max(ed1,ed2);
        for(int i=0;i<ed;++i){
            if(s1[i%ed1]>s2[i%ed2]){
                pd = 1;
                break;
            }
            if(s1[i%ed1]<s2[i%ed2]){
                pd=-1;
                break;
            }
        }
        if(pd==0)cout << "=" << endl;
        else if(pd==1)cout << ">" << endl;
        else cout << "<" << endl;
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值