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函数