【发布时间】:2021-09-26 09:54:09
【问题描述】:
尝试编写一个程序来检查string s1 的排列是否存在于string s2 中。
在下面创建的程序,它适用于下面的测试用例。
输入:
s1 = "ab"
s2 = "eidballl"
输出:
True
解释:s2 包含s1 的一个排列(即ba)。
但是当输入 s2="sdfdadddbd" , s1="ab", expected as, false, but got true.
我正试图弄清楚这里缺少什么。使用滑动窗口方法。在c#中我的代码下方:
public bool CheckInclusion(string s1, string s2) {
var intCharArray = new int[256];
foreach(char c in s1)
{
intCharArray[c]++;
}
int start=0,end=0;
int count=s1.Length;
bool found=false;
while(end<s2.Length)
{
if (intCharArray[s2[end]]>0) { count--;}
intCharArray[s2[end]]--;
Console.WriteLine("end:" + end + " start:"+ start);
if(end-start==s1.Length) {
if (count==0) {return true;}
if (intCharArray[s2[start]]>=0)
{
count++;
}
intCharArray[s2[start]]++;
start++;
}
end++;
}
return false;
}
【问题讨论】:
-
代码除了
true之外没有其他地方返回任何东西,所以无论算法如何,它都不能说false -
编辑为假。
-
重新思考萨米的话,好吗?将其更改为 false 并不能解决只有一个
return带有硬编码返回值的事实。当它总是返回 YES 或总是返回 NO 时,你希望它如何决定答案是 YES/NO? -
编辑的部分是这样的,
if(end-start==s1.Length) {return true;}和return false如果它从未被发现是真的。发布了一个问题以找出我做错的问题。
标签: c# algorithm anagram sliding-window