给出错误的输出
Giving Wrong output
我正在尝试 Leetcode 问题 https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/
这是return 最少需要更改的字母数,才能使两个字符串变位词。但是,当传递一个字符串 "leetcode" 和其他字符串 "practise" 时,它应该输出 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;
}
};
你的逻辑似乎'about'是对的。但是,请检查您的以下代码:
vector<char> :: iterator it = find(v1.begin(),v1.end(),c);
if(it != v1.end()){
flag=1;
break;
}
这里说的是,如果字符c之前已经见过,BREAK跳出循环。我假设你的意思是继续循环的下一次迭代。
这是因为当您 break 时,您并没有打破向量 v1 上的循环(我认为这就是您的假设)。相反,你打破了字符串 s.
上的循环
我正在尝试 Leetcode 问题 https://leetcode.com/problems/minimum-number-of-steps-to-make-two-strings-anagram/
这是return 最少需要更改的字母数,才能使两个字符串变位词。但是,当传递一个字符串 "leetcode" 和其他字符串 "practise" 时,它应该输出 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;
}
};
你的逻辑似乎'about'是对的。但是,请检查您的以下代码:
vector<char> :: iterator it = find(v1.begin(),v1.end(),c);
if(it != v1.end()){
flag=1;
break;
}
这里说的是,如果字符c之前已经见过,BREAK跳出循环。我假设你的意思是继续循环的下一次迭代。
这是因为当您 break 时,您并没有打破向量 v1 上的循环(我认为这就是您的假设)。相反,你打破了字符串 s.
上的循环