给出错误的输出

Posted

技术标签:

【中文标题】给出错误的输出【英文标题】:Giving Wrong output 【发布时间】:2020-09-08 23:07:09 【问题描述】:

我在尝试 Leetcode 问题https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/

它是返回使两个字符串变位词需要更改的最小字母数。然而,当传递一个字符串 "leetcode" 和其他字符串 "practice" 时,它应该给出输出为 5 但给出 3。

逻辑:

    开始一个 for 循环,一个接一个地获取第一个字符串的字母。说“L” 然后计算第一个字符串中有多少个字母,即“L”。将其值存储在 val 中,即 val = 1; 然后类似地计算第二个字符串中“L”的数量并将该值存储在 count 中,即 count=0; 然后如果 val>count 减去 val - count 即 1-0 = 1 并将其存储在 sum 中; 现在在第一个字符串的每个字母中同样执行上述所有 4 个步骤,并将每个结果添加到 fsum 中,即 fsum+=sum; 因此 fsum 将告知需要更改的字母数。

谁能帮我找出我的错误?

class Solution 
public:
    int minSteps(string s, string t) 
        vector<char> v1;
        char c;
        int flag;
        int val=0;
        int count=0;
        int len=0;
        int sum=0;
        int d=0;
        int fsum=0;

        for(int i=0;i<s.length();i++)
            c=s[i];
            flag=0;

            vector<char> :: iterator it = find(v1.begin(),v1.end(),c);

            if(it != v1.end()) 
                flag=1;
                break;
            
            else 
            if(flag==0)
                v1.push_back(c);

                len=s.length();
                d=0;
                val=0;
                while(len)
                    if(c==s[d]) val++;
                    d++; len--;
                 

                //comparison in 2nd string
                len=t.length();
                d=0;
                while(len)
                    if(c==t[d]) count++;
                    d++; len--;
                

                if(val>count) 
                    sum=val-count;
                    fsum+=sum;
                    val=count=0;
                
            
        
        return fsum;
    
;

【问题讨论】:

旁注,请初始化你的ints,如flag、val、count。并将它们放在单独的声明中。 做了但没有帮助。 也许它不会帮助解决这个错误,但它会帮助防止许多其他错误 好的,我分享更新的代码 抱歉,您没有明白重点。你应该初始化你的变量。你永远不会初始化 count 并且使用它的值会导致未定义的行为 【参考方案1】:

您的逻辑似乎“大约”是正确的。但是,请检查以下代码:

vector<char> :: iterator it = find(v1.begin(),v1.end(),c);
if(it != v1.end()) 
        flag=1;
        break;

这就是说,如果字符 c 之前已经出现过,则 BREAK 退出循环。我假设你的意思是继续循环的下一次迭代。

这是因为当您中断时,您不会中断向量 v1 上的循环(我认为这是您的假设)。而是在字符串 s 上打破循环。

【讨论】:

还有一些其他缺失的部分,但正如我所说,我们会一起解决这个问题:) 我做了继续;声明也一样,但结果相同 永远不要写像 val=count=0 这样的语句。将其更改为 val=0;计数 = 0;原因是,每条语句都有一个返回值和它的作用。当你说 val=count=0 时,它被解释为 val = (count = 0),所以 count = 0 是一个表达式,它的返回值被赋值给 val。 @KaranNayyar 你发现缺陷了吗? 不,我还没有找到它,我也做了所有的改变和计数

以上是关于给出错误的输出的主要内容,如果未能解决你的问题,请参考以下文章

Perl的die和warn函数

我在 laravel 中运行“php artisan serve”命令时出错,它给出以下错误

异常

Predis 给出“从服务器读取行时出错”

python/tensorflowpycharm 2019,python 3.6.2, win7 64bit系统,安装tensorflow出错,错误如下,解决办法给出!

python/tensorflowpycharm 2019,python 3.6.2, win7 64bit系统,安装tensorflow出错,错误如下,解决办法给出!