1.9 字符串旋转

     《程序员面试金典》(第六版)习题:仅为记录一下以加强印象,不为商业用途,如有侵权请联系删除。以下源码和解释参考了书中源码以及这里:https://github.com/alexhagiopol/cracking-the-coding-interview

bool stringRotation(const std::string &s1, const std::string& s2) 
{
    int len=s1.size(); 
    if((len==s2.size()) && (len>0))
    {
        const std::string s3 = s1 + s1;
        return s3.find(s2) != std::string::npos; 
    }
    return false;
}

     字符串旋转的定义:对于字符串 s 1 s_{1} s1,从某位置将字符串 s 1 s_{1} s1划分为两部分x和y,x为其前面部分,y为其后面部分即 s 1 = ( x ) : ( y ) s_{1}=(x):(y) s1=xy,则将 s 1 s_{1} s1从该划分点旋转可以得到字符串 s 2 s_{2} s2,即 s 2 = ( y ) : ( x ) s_{2}=(y):(x) s2=yx。例如对于字符串 “ w a t e r ” “water” water,将其从字符 ′ a ′ 'a' a ′ t ′ 't' t的链接处划分后可以得到 x = " w a " x="wa" x="wa" , y = " t e r " y="ter" y="ter"。旋转后得到的字符串为 “ t e r w a ” “terwa” terwa
     如果字符串 s 1 = ( x ) : ( y ) s_{1}=(x):(y) s1=xy, 则 s 1 + s 1 = ( x ) : ( y ) : ( x ) : ( y ) = ( x ) : s 2 : ( y ) s_{1}+s_{1}=(x):(y):(x):(y)=(x):s_{2}:(y) s1+s1=xyxy=xs2y。因此如果字符串 s 2 = ( y ) : ( x ) s_{2}=(y):(x) s2=yx为字符串字符串 s 1 s_{1} s1旋转而来,则字符串 s 2 s_{2} s2为字符串 s 1 + s 1 s_{1}+s_{1} s1+s1的字串。这就是算法的大致原理。
     该算法的时间和空间复杂度取决于函数find的时间和空间复杂度(不知对不对?)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

qqssss121dfd

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

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

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

打赏作者

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

抵扣说明:

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

余额充值