CodeForces 1316 B(字符串函数简单运用)

题目

这题真是做得我心态爆炸!

题意:
给你一个字符串,让你从第一个字符开始,将以它为开头的长度为 k 的子串翻转,这样的子串与剩下的串构成新串,接着从第二个字符开始直到第 n-k 个,找出这样构成的新串中字典序最小的,如有多个,k要最小的。

这题可以通过简单的找规律发现:
当n-k+1为奇数时,新串前一部分是原串前k个字符;为偶数时,前一部分是前k个字符翻转
所以暴力比较所有新串,找出最小的即可。

在解决本题之前,先介绍两个函数:
子串截取函数 substr()
头文件#include<string>

string s1,s2;
s1=s2.substr(i,k);//以为s1为s2从i位置开始,截取的长度为k的串,k不写默认到结尾

reverse()函数
头文件#include<algorithm>

string s;
reverse(s.begin(),s.end());//将s反转

这两个函数让我初识了string类。。。

string可以让字符串直接比较大小,相加,复制,非常方便

AC代码:

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
       int n;
       string s;
       cin>>n>>s;
       string ans=s;
       int pos=1;
       for(int i=0;i<n;i++)
       {
         string s1=s.substr(0,i);
         string s2=s.substr(i);
         if((n-i+1)%2==0)
            reverse(s1.begin(),s1.end());
         string temp=s2+s1;
         if(temp<ans)
         {
           ans=temp;
           pos=i+1;
         }
       }
       cout<<ans<<endl<<pos<<endl;
    }
return 0;
}

感觉这次的博客写的不太好,不过主要还是为了通过这题总结string相关的函数

戒骄戒躁,百炼成钢!
原文地址:https://www.cnblogs.com/Pecoz/p/12423180.html