Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个代码在C++中是如何工作的?_C++_String - Fatal编程技术网

这个代码在C++中是如何工作的?

这个代码在C++中是如何工作的?,c++,string,C++,String,昨天我参加了第二分区396号的联合部队。 在我看来,当我读到这篇文章的时候,这个问题似乎已经很复杂了。 昨天和今天的比赛中,我都试着解决这个问题。 我想出了一个200行长半工作的解决方案。然后我放弃了 我看了其他人在那里写的东西,看到了最多20行的代码,这对我来说似乎很神奇 该问题要求您输出两个字符串中最长的不常见字母子序列的长度。 您可以在此处阅读完整问题: 能否解决此高级任务?它似乎无法解决手头的任务。当字符串相等时,它只输出-1;当长度相同时,它只输出较长字符串的长度。然而,这个问题需要

昨天我参加了第二分区396号的联合部队。 在我看来,当我读到这篇文章的时候,这个问题似乎已经很复杂了。 昨天和今天的比赛中,我都试着解决这个问题。 我想出了一个200行长半工作的解决方案。然后我放弃了

我看了其他人在那里写的东西,看到了最多20行的代码,这对我来说似乎很神奇

该问题要求您输出两个字符串中最长的不常见字母子序列的长度。 您可以在此处阅读完整问题:


能否解决此高级任务?

它似乎无法解决手头的任务。当字符串相等时,它只输出-1;当长度相同时,它只输出较长字符串的长度。然而,这个问题需要最长的不寻常序列。如果输入abc和abcd,则无法给出答案,1宁愿给出4

该行的作用如下:

它检查a==b,字符串是否相等。 如果它们相等,则三元运算符A中的条件A为真?B:C,所以表达式的计算结果是B,这里是-1。 如果它们不相等,它将计算为C,这是两个字符串长度中的最大值,所以它将是较长字符串的长度。 然后打印三元表达式的值,尽管没有换行符,这有点糟糕。 所以代码很短,因为它只解决了少数情况下的问题,而不是一般情况下的问题

printf ("%d", a == b ? -1 : max (a.size (), b.size ()));
相当于

if (a == b) {
    printf ("%d", -1);
}
else {
    if (a.size () > b.size ()) {
        printf ("%d", a.size ());
    }
    else {
        printf ("%d", b.size());
    }
}
顺便说一句,这只是解决问题的一小步

[更正]


它确实解决了整个问题参见Pete Becker的答案如果两个字符串相等,则没有不常见的子序列。如果它们不相等,则两个序列都不是另一个的子序列,但每个序列都是其自身的子序列,因此每个序列都是不常见的子序列。两者中较长的是最长的不常见子序列,其长度是正确答案。如果两者不相等,但长度相同,则每一个都是不常见的子序列,最长的子序列的长度正好是其中任何一个的长度


不要纠结于你或任何其他通情达理的人所认为的后果。这个问题定义了不常见的子序列,您所要做的就是应用它的定义。这个问题是关于文字播放,而不是编码。

所有这些操作都是比较字符串是否相等,如果它们不相等,则输出较大的字符串。这解决问题的原因值得您思考:-欢迎来到堆栈溢出。请花点时间阅读并参考您可以在此处询问的内容和方式。[foo]?[bar]:[baj]三元等效于:如果[foo],则输出栏;否则输出baj@安德烈:我不认为它真的解决了问题,看看我的答案。@martinues当然解决了,我不能说我同意你的答案。Pete Beckers的答案是perfectabcd是其自身的子序列,而它不是abc的子序列,因此它是最长的不寻常子序列。我阅读问题陈述时没有顺序,但两个输入是平等的。所以abc是abc的子序列,最长的不寻常子序列是d,因此d是不寻常子序列,但它不是唯一的一个。这个问题问的是最长的长度,最长的是abcd。我想我明白你的意思了。事实上,这个问题是关于文字游戏的。好吧,但这是可以接受的:太糟糕了,我已经通过你的链接阅读了原始作业,而微小的代码片段肯定不能解决它。顺便说一句,你说的是大约20行代码?但是片段只有8行。正确的解决方案是什么?顺便说一句,不要评判我,我没有你们这么先进:我当然不会评判你们!看来你真的试过了。你能给我们看看你自己的代码吗?好的,我可以给你看。但我现在想,也许我没有正确理解任务。。。
printf ("%d", a == b ? -1 : max (a.size (), b.size ()));
if (a == b) {
    printf ("%d", -1);
}
else {
    if (a.size () > b.size ()) {
        printf ("%d", a.size ());
    }
    else {
        printf ("%d", b.size());
    }
}