1031 对称串

Q:
Description:
有一些字串,有些对称,有些不对称,请将对称的串按长度排列。
Sample Input:
123321
123454321
123
321
sdfsdfd
121212
\dd\
Sample Output:
123321
\dd\
123454321
A:
1)从中轴线开始向两侧逐个判断
TLE 超时了

注:
1)getline函数
getline(cin,name,结束的字符)(一般结束默认是’\n’或者是EOF)
结束只是终止输入,不能终止循环。
循环的判断在cin
只要输入(包括回车)
循环一直进行

#include<iostream>
#include<string>
using namespace std;
string str;
string out[100000];
void mysort(int sum)
{
	int min = 0,flag=1;
	for (int i = 0; i < sum-1&&flag; i++)
	{
		min = i; flag = 0;//冒泡排序,n个数循环n-1次
		for (int j = i + 1; j < sum; j++)
		{
			if (out[min].size() > out[j].size())min = j;
		}
		if (min != i)
		{
			string a;
			a = out[i];
			out[i] = out[min];
			out[min] = a;
			flag = 1;
		}
	}
}
bool compare(int mid,int end)
{
	//不能判断长度为奇数的
	int start1 = 0,start2=mid+1;
	for (int i = start1, j = end; i <= mid&&j >= start2; i++, j--)
	{
		if (str[i] != str[j])return false;
	}
	return true;
}

int main()
{
	int sum = 0;
	while (getline(cin, str),str!="\0")
	{
		int end = str.size()-1;//size求的长度不包含'\0'的位置
		int length = str.size();
		int mid;
		if (length% 2 != 0)
		{
			mid = (length-1)/ 2-1;
		}
		else mid = length/ 2-1;
		if (compare(mid, end))
			out[sum++] = str;
	}
	//排序和输出
	mysort(sum);
	for (int i = 0; i <= sum; i++)
		cout << out[i] << endl;
}

2)字符串颠倒后判断
reverse函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值