小明的字符串

小明的字符串

http://www.nowcoder.com/questionTerminal/c6d9d7fb1b584ca5939f366618c847d8

题解

题目难度:简单难度

知识点:字符串、数学逻辑

方法(一)

字符串拼接函数substr()用法说明:

如果string s="0123456789";

string sub1=s.substr(5); 表示从下标5开始一直到字符串结束

sub1="56789";

string sub2=s.substr(3,5);表示从下标3开始一直到后面5位数结束

sub2="34567";

#include <iostream>
using namespace std;
int main()
{
    int N,T,t,x;
    cin>>N>>T;
    string s;
    cin>>s;
    for(int i=0;i<T;i++)
    {
        cin>>t>>x;
        if(t==1)
            s=s.substr(s.size()-x)+s.substr(0,s.size()-x);
        if(t==2)
            cout<<s[x]<<endl;
    }
    return 0;
}

方法(二)

不采用字符串的拼接,类似环形数组,每次用flat代表字符串起点位置,初始时flat=0。

当type=1时:

那么字符串的起始位置向后移动N-x为,即flat=flat+N-x,因为为环状当flat=N时即为flat=0,因此进行取模操作flat%=N;

当type=2时:

当前字符串的起点位置为flat,需要找到第x位,即flat+x。同样由于形成环,需要进行取,即(flat+x)%N。

#include <iostream>
using namespace std;
int main()
{
    int N,T,t,x;
    cin>>N>>T;
    string s;
    cin>>s;
    int flat=0;
    for(int i=0;i<T;i++)
    {
        cin>>t>>x;
        if(t==1){
           flat+=N-x;
           flat%=N;
        }
        if(t==2)
            cout<<s[(flat+x)%N]<<endl;
    }
    return 0;
}
全部评论

相关推荐

头像
11-27 14:28
长沙理工大学
刷算法真的是提升代码能力最快的方法吗?&nbsp;刷算法真的是提升代码能力最快的方法吗?
牛牛不会牛泪:看你想提升什么,代码能力太宽泛了,是想提升算法能力还是工程能力? 工程能力做项目找实习,算法也分数据结构算法题和深度学习之类算法
点赞 评论 收藏
分享
10-07 20:48
门头沟学院 Java
不敢追175女神:可能是实习上着班想到后面还要回学校给导师做牛马,看着身边都是21-25的年纪,突然emo了了
点赞 评论 收藏
分享
10-15 15:00
潍坊学院 golang
跨考小白:这又不是官方
投递拼多多集团-PDD等公司10个岗位
点赞 评论 收藏
分享
11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务