首先声明:管理,这不算题解吧,别棕我
发现很多题解没有对 cmp 写法进行合理解释
bool cmp(string a,string b)
{
return a+b>b+a;
}
我在此解释一下写 a+b>b+a 的部分改写 a>b 会 WA 的原因吧。
a>b 比较过程的弊端:
在 string 类型字符串比较中是从最高位开始比较,遇到相同的就比较下一位,但也有特殊情况:
比如对于字符串 ABC 和 ABCD 字典序的比较,c++会以空('')作为最小字典序。所以前三位相同的情况下,字符串 ABC 最后是空,字典序更小,认为 ABC<ABCD,这就会有问题了。
a>b 比较的问题:
给出样例:
2
1230 123
用眼看就知道答案是 1231230 ,但 123 最后是空,字典序更小,如果只比较 a>b 排序的话,结果将会是 1230123,所以就 WA 了。
而如果比较 a+b>b+a 排序,则两个字符串长度相同,不存在“空”的比较,所以就能 AC 了。