#include <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int tt[N];
int k[N];
int main()
{
string s,t;
cin>>t>>s;
for(int i=0;i<t.size();i++) tt[t[i]]++;
for(int i='a';i<='z';i++)
{
if(tt[i]==0) cout<<(char)i;
}
for(int i=t.size()-1;i>=0;i--)
{
if(k[t[i]]==0) cout<<t[i];
k[t[i]]++;
}
return 0;
}
我的思路是:题目中说“在输出中靠前位置的字母小于在输出中靠后位置的字母”,那么我只要把L队的字符串倒着放到更改后的字典序最后,这样不管另一个字符串是什么,反正L队的字符串是最大的
但是提交后只有80分,不知道哪儿有问题
如果s包含t的话,比如s = abc, t = ab。你的程序的输出应该是defghijklmnopqrstuvwxyzcba,此时s > t。
不知道你这个问题是否已经解决, 如果还没有解决的话://思路:用p从头扫描链表,pre指向*p的前驱,用minp保存最小值(初始值为p),minpre指向*minp结点的前驱。一边扫描,一边比较,若p->data小于minp->data,将p、pre分别赋值给minp、minpre。扫描完毕后,minp指向最小值结点,minpre指向最小值结点的前驱结点。再将minp所指结点删除。
LinkList Delete_Min(LinkList &L){
LNode *pre=L,*p=pre->next; //p为工作结点,pre指向其前驱
LNode *minpre=pre,*minp=p; //保存最小值及其前驱结点
while(p!=NULL){
if(p->data<minp->data){
minp=p;
minpre=pre;
}
pre=p;
p=p->next;
}
minpre->next=minp->next; //删除最小值结点
free(minp);
return L;
}