B. Reverse String

题目来源

https://codeforces.com/problemset/problem/1553/B

题外话:
最近也打了不少比赛,但是总体进步不高,就觉得是自己的方法有点问题。
就打过的比赛,会的题,一般十分内就写出来了,不会的题,只要看着第一时间没有思路,就一定做不出来(哈哈哈哈,我先笑自己一会儿)
事后虽然有补题,但是那些稍稍高出自己水平的题,自己还是看了题解之后,才一点点理解的。总而言之,就是自己不会的题,做的太少
所以我决定改变策略,我也是最近才发现,cf上可以搜索相应难度的题目。
所以最近几天坚持只做1000-1500的题目,看看思路是否可以有提升。lmy加油鸭~

题目大意

有一个字符串,你可以在这个字符串的任意位置放置一个芯片。你可以将芯片向右移动任意个单位,或向左移动任意个单位。但是注意,若芯片已经在最右边了,则无法再向右移动,向左亦如此。
这个时候,你将你放置芯片和你移动芯片时,芯片位置对应的字母写下来得到一个新的字符串。
问,给出两个字符串,一个s,一个t,t能否是s通过以上操作得到的。

我的思路

题目的名字起的很有意思,反转字符串。
t其实就是从字符串头元素,到放置芯片的初始位置,这一段的字符串+它的反转字符串。
(我的语言表达能力不太好,直接上代码吧,我觉得代码更好懂)

分类

思维,字符串的基本操作

我的代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int t;
    string a, b;
    cin >> t;
    while (t--)
    {
        int flag = 0;
        cin >> a >> b;
        for (int i = 0; i < a.size(); i++)
        {
            string a1 = a.substr(0, 1 + i), a2 = a.substr(0, i);
            reverse(a2.begin(), a2.end());
            a1 = a1 + a2;
            if (a1.find(b)!=-1)
            {
                flag = 1;
                break;
            }
        }
        cout << (flag ? "YES" : "NO") << "\n";
    }
    return 0;
}

关于此题的总结

substr函数:
有两个参数,一个是起始位置,一个是终止位置,要注意:

string a="abcdef";
b=a.substr(0,3);

b是:“abc”而不是“abcd”
find函数:
find函数的返回值是无符号整型,如果查找不到,就会返回-1或4294967295
所以能够找到是a.find©!=-1
reverse函数
可用于字符串的颠倒

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值