给出错误的输出

Giving Wrong output

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

这是return 最少需要更改的字母数,才能使两个字符串变位词。但是,当传递一个字符串 "leetcode" 和其他字符串 "practise" 时,它应该输出 5 但给出 3.

逻辑:

  1. 开始一个 for 循环,一个一个地获取第一个字符串的字母。说取 'L'
  2. 然后计算第一个字符串中有多少个字母,即 'L'。将其值存储在 val 中,即 val = 1;
  3. 然后类似地计算第二个字符串中'L'的数量并将值存储在count中即count=0;
  4. 然后如果 val>count ,减去 val - count 即 1-0 = 1 并将其存储在 sum 中;
  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;
                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;
    }
};

你的逻辑似乎'about'是对的。但是,请检查您的以下代码:

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

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

这是因为当您 break 时,您并没有打破向量 v1 上的循环(我认为这就是您的假设)。相反,你打破了字符串 s.

上的循环