sicily 1198 Substring

这道题看似很简单,就是排序问题。但有一种特殊情况,即b,ba。实际上应是bab,而不是bba。红色标注的地方是最有意思的一处,我也是借鉴别人的做法。

#include <stdlib.h>

#include <iostream>

#include <string>

using namespace std;

typedef struct node{

	string s;

	struct node* ptr;

}Node;

int main()

{

 	int t,n;

	string s;

	Node* headerPtr;

	Node* cur, *pre;

	cin>>t;

	for(int i=0;i<t;i++)

	{

	 	cin>>n;

		headerPtr=NULL;

		for(int j=0;j<n;j++)

		{

		 	cin>>s;

			pre=cur=headerPtr;

			while(cur!=NULL)

			{

			 	if(cur->s+s<s+cur->s)

				{

				 	pre=cur;

				 	cur=cur->ptr;

				}

				else

				{

				 	break;

				}

			}

			if(headerPtr==cur)

			{

				Node* temp=new Node();

				temp->s=s;

				temp->ptr=headerPtr;

				headerPtr=temp;

			}

			else

			{

			 	Node* temp=new Node();

				temp->s=s;

				temp->ptr=cur;

				pre->ptr=temp;

			}	

		}

		while(headerPtr!=NULL)

		{

		 	cout<<headerPtr->s;

			Node* temp=headerPtr;

			headerPtr=headerPtr->ptr;

			delete temp;

		}

		cout<<endl;

	}

	system("pause");

	return 0;

} 

 

你可能感兴趣的:(substring)