对于数据“db,bc”总是判断前者为“1”,原因是代码中只判断是否有小于当先字符的,并未考虑交换后字典数,但自己无法解决,求解谢谢%%%
#include<bits/stdc++.h>
using namespace std;
int n,m;
struct Word{
char str[3010];
int character[26+1];
}w[3010];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
cin>>w[i].str;cin.get();
for(int j=0;j<m;j++){
w[i].character[w[i].str[j]-'a'+1]++;
}
}/*
for(int i=1;i<=26;i++){
printf("%c ",char('a'+i-1));
}
printf("\n");
for(int i=1;i<=n;i++){
for(int j=1;j<=26;j++){
printf("%d ",w[i].character[j]);
}
printf("\n");
}*/
/*
a b a n d o n
b a n a n a a
b a a n n a a
n o t n o t n
a a b b c c a
a a b b c c c
就是说要保留原始数据
*/
//最坏时间复杂度Θ(3000^3),wi为长度为m的小写字母字符串且两两不同。
for(int i=1;i<=n;i++){
bool isTure=true;
int character_temp[26+1];
for(int j=1;j<=n;j++){
if(j==i)continue;
//对i重新赋值
for(int k=1;k<=26;k++){
character_temp[k]=w[i].character[k];
}
//从第0项开始查找
int x=0,y=0;
while(isTure==true){
int xx=w[i].str[x]-'a';
int yy=w[j].str[y]-'a';
if(xx<yy){//如果字典数小直接退出
break;
}else{//如果不小于,则寻找字典数<=的
bool isTure_temp=false;//
for(int l=1;l<yy;l++){//先寻找字典数<的
if(character_temp[l]){//如果找到则退出
isTure_temp=true;
break;
}
}
if(isTure_temp==true){
break;
}else{
if(character_temp[yy]>0){
character_temp[yy]--;
}else{
isTure=false;
break;
}
}
}
x++,y++;//针对相等的情况来说
}
if(isTure==false)break;
}
if(isTure==false)printf("0");
else printf("1");
}
return 0;
}