我正在尝试Leetcode问题https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/
这是返回需要更改以组成两个字符串字谜的最小字母数。但是,当传递字符串“ leetcode”和其他字符串“ practise”时,应将输出为5但给出3。
LOGIC:
有人可以帮助我发现我的错误吗?
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;
}
};
您的逻辑似乎是正确的。但是,请检查以下代码:
vector<char> :: iterator it = find(v1.begin(),v1.end(),c);
if(it != v1.end()){
flag=1;
break;
}
这是说,如果以前已经看到过字符c,则跳出循环。我假设您的意思是继续循环的下一次迭代。
这是因为当您break时,您不会中断向量v1的循环(我认为这就是您的假设)。而是您打破了字符串s的循环。