1.前言
hello大家又见面咯,本次blog又为大家带来一个题目,也是来自AtCoder的一道题,具体题目在链接:B - ss,本题主要考察大家对字符串的掌握程度,还是一样,代码和注释安排的妥妥的,当然,这肯定不是最佳解法,如果有更好的思路,欢迎在评论区交流互检鉴学习哦!
2.题目分析
具体题目如下图:
3.题目解法
#include <stdio.h>
#include<string.h>
int main()
{
char str[201] = { 0 }; //定义输入的字符串
scanf("%s", str);
str[strlen(str) - 1] = '\0'; //首先题目要求刚开始如果是偶数字符串的话,咱们至少要删除一个字符,但是呢,如果是奇数字符串的话,就不可能出现分割后相等的情况,所以无论如何我们都要先删除一个字符
char* p1 = str; //定义一个指针用于以后用于存储分割前面的字符串
char* mid = str + (strlen(str) / 2); //定义mid存储分割后面的字符串
//开始说明如果删除了一个字符还是奇数字符串的情况
if (strlen(str) % 2 == 1)
{
str[strlen(str) - 1] = '\0'; //这时还要再删一个,因为奇数字符串分割后不可能相等
mid = str + (strlen(str) / 2); //此时mid也会跟着变更一下
}
while (1)
{
if (*p1 != *mid) //现在就开始遍历是否相等
{
str[strlen(str) - 2] = '\0'; //如果不相等呢,说明分割点不正确,但是现在已经是偶数字符串,所以直接删除两个,再变成偶数字符串
p1 = str; //让p1回来,别跑远了
mid = str + (strlen(str) / 2); //mid再次指向中间
}
else //如果还是相等呢?
{
p1++; //那就继续遍历
mid++; //p1和mid都++
}
if (*mid == '\0')
{
break; //如果遍历完了,还是没出现问题,此时mid指向末尾了,也就是'\0',说明分割正确咯,我们的任务也就完成了,就直接跳出循环打印str的长度就好了
}
}
printf("%d", strlen(str));
return 0;
}
虽然可能不是最好的解法,但是我的解法是不是也清晰明了呢?关注我刷好题哦!而且都有详细解法哦!咱们下期见!