C. 啊对对对 (南阳理工oj—21第二次招新赛)

 

 

 

解法

找到最长的公共前后缀以后,我们可以先输出t,然后t中的最长公共前后缀无需再输出(重复),只输出不重复的部分即可。
比如 aba公共前后缀为a ,不重复的部分为ba,所以你只需要先输出t(aba),再输出k-1ba 就能构造出这样的字符串。
建议CSDN自学下string用法。(当然不用string也能写)

注:上述解法来自南阳理工oj官方公告

AC代码如下:

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	int n,k;
	cin>>n>>k;
	string str,ans;
	int res = 0;//最大前缀 
	int temp = 0;//最大后缀
	cin>>str;
	for(int i = str.length()-1;i>=1;i--)//遍历一下
	{
		//substr()方法用于字符串的截取
		if(str.substr(0,i) == str.substr(str.length()-i,i))
		{
			res = i;
			temp = i;
			break;//找到最大的了 
		}
	}
	ans = str;
	k--;
	while(k--)
	ans += str.substr(temp,n);
	cout<<ans<<endl;
	return 0; 
} 

 我们的目标是找到最大前缀 与 最大后缀!

从代码中看,似乎只用到了temp(最大后缀),res(最大前缀)没有用到,其实:temp = res,因为一个是从后面向前数,一个是从前面向后数,记录的都是个数。

之所以用temp是因为更加方便(为什么方便请看题解,应该就可以理解了,滑稽保命)

接下来,补充一下substr的用法:

substr()方法用于字符串的截取
两个参数用法:

字符串.substr(参数1,参数2)

 

参数1(可以是0、正整数、负数)
参数1:

  • 如果是0或正整数,则代表字符串截取的起始下标

  • 如果是负数,则代表从倒数第几个字符开始截取

参数2:

  • 字符串截取字符的个数(正整数)

  • 如果是0或负数,则会返回空字符串

还有一个参数的用法:

字符串.substr(参数);

 

参数:

  • 如果是0或正整数:字符串截取的起始下标,默认截取至字符串结尾
  • 如果是负数:则从倒数第几个字符开始截取,默认截取至字符串结尾

所以通过substr,我们遍历一下,就可以得到temp 与 res!(前面的一段 是否 等于 后面的一段)

根据题意:

我们先输出str(你输入的字符串)

接下来我们只需要输出k-1个 str.substr(temp,n)就可以了。

最后感谢您的阅读!!!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Joanh_Lan

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

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

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

打赏作者

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

抵扣说明:

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

余额充值