输出错误

问题描述 投票:-2回答:1

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

这是返回需要更改以组成两个字符串字谜的最小字母数。但是,当传递字符串“ leetcode”和其他字符串“ practise”时,应将输出为5但给出3。

LOGIC:

  1. [开始一个for循环,一个接一个地接收第一个字符串的字母。说“ L”
  2. 然后计算第一个字符串中有多少个字母,即'L'。将其值存储在val中,即val = 1;
  3. 然后类似地对第二个字符串中的'L'进行计数,并将该值存储在count中,即count = 0;
  4. 然后,如果val> count,则减去val-计数,即1-0 = 1并以总和存储;
  5. 现在类似地在第一个字符串的每个字母中执行上述所有4个步骤,并将每个结果添加到fsum中,即fsum + = sum;
  6. 因此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;
                continue;
                }

                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=0; count=0;
                    }
                }
            }

        return fsum;
    }
};
c++ string anagram
1个回答
0
投票

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

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

这是说,如果以前已经看到过字符c,则跳出循环。我假设您的意思是继续循环的下一次迭代。

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

© www.soinside.com 2019 - 2024. All rights reserved.