#include
#include
using namespace std;
bool compare(string a,string b){
if(a[0]==b[0]){
return a.length()>b.length();
}
else{
return a<b;
}
}
int main() {
int n;
cin>>n;
string str[n];
for(int i=0;i<n;i++){
cin>>str[i];
}
sort(str,str+n,compare);
for(int i=0;i<n;i++){
cout<<str[i]<<"\n";
}
return 0;
}
What wrong in my code test case 1 failed
@dineshjani Hey you are just comparing
if(a[0]==b[0]){
return a.length()>b.length();
}
which is wrong.
Follow this:
Make an array of strings and then sort it according to the condition that if there is a prefix match between two string, sort in decreasing order of length. Use C++ inbuilt sort function with a custom comparator something like this:
bool mycompare( string a, string b)
{
int l1=a.length();int l2=b.length();int flag=-1;
for(int i=0;i<min(l1,l2);i++){
if(a[i]!=b[i])
flag=0;
}
if(flag==-1) // means there is a prefix match
return l1>l2; // so sort decreasing order of length
else
return a<b; //sorting in normal dictionary order when no prefix match
}
Hope this helps