Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 字符串搜索算法的实现_Javascript_Python_String_Algorithm_Search - Fatal编程技术网

Javascript 字符串搜索算法的实现

Javascript 字符串搜索算法的实现,javascript,python,string,algorithm,search,Javascript,Python,String,Algorithm,Search,我使用naive方法实现了字符串搜索算法,以计算子字符串在字符串中出现的次数。我用javascript和python进行了实现 算法(来自Topcoder): 现在我的问题是关于实现if(j==b.length)的行:它在javascript中运行良好,但对于python,我需要在j的值上加1,或者从b的长度中减去1。我不知道为什么会发生这种情况。您有这种困惑,因为您的代码不相同。执行(j=0;j

我使用naive方法实现了字符串搜索算法,以计算子字符串在字符串中出现的次数。我用javascript和python进行了实现

算法(来自Topcoder):


现在我的问题是关于实现if(
j==b.length
)的行:它在javascript中运行良好,但对于python,我需要在
j
的值上加1,或者从
b
的长度中减去1。我不知道为什么会发生这种情况。

您有这种困惑,因为您的代码不相同。执行(j=0;j
j
的最终值将是
b.length
(如果b是a的子字符串),但对于Python,情况略有不同。运行
范围(len(“1234”)
将导致
[0,1,2,3]
,因此您的
for
更像是一个
foreach
j
存储数组中的最后一个值,这就是您必须添加一个值的原因。我希望我说得够清楚了。如果没有,请询问详情

for x in range(4)
与Python中的Javascript不同,for循环用于列表中的每个元素。x将采用的最后一个值是列表[0,1,2,3]的最后一个元素,即3

for(x = 0; x < 4; x++)
(x=0;x<4;x++)的


在Javascript中,x将取4的值,循环将结束,因为x<4的条件不再适用。x的最后一个值是4。

我发现您的python实现存在一些问题。如果设置b=“ray”,函数将不正确地返回1。您可能会误解边缘条件。 这两个条件语句应处于同一级别

a = "Rainbow"
b = "Rain"
def SubStrInStr(Str, SubStr):
   count = 0
   for i in range(len(Str)):
       for j in range(len(SubStr)):
           # print (j)
           if (a[i + j] != b[j]):
               break
           if (j+1 == len(SubStr)):
               count+=1
return count
print(SubStrInStr(a, b))here

我不知道javascript,但我用Python实现了naive search,所有情况下都使用最简单的方法。

请按如下方式浏览一下。 它将返回未找到的时间模式。

def naive_pattern_搜索(数据,搜索):
n=len(数据)#查找数据长度
m=len(搜索)#查找要搜索的图案的长度。
i=0
计数=c=0#如果存在,则取计数模式。
对于范围(m-1)内的j:#循环继续,直到要搜索的图案长度。
而我(m-1):
j=0
#数据和搜索具有相同的元素,然后两个索引都增加1。
如果数据[i]==搜索[j]:
#打印(f“\n{data[i]}{search[j]}”)
#打印(f“i:{i}{data[i]}j:{j}{search[j]}”)
i+=1
j+=1
计数+=1
#如果一个模式进行比较并成功找到,则该模式的计数器。
如果计数==(m-1):
c=c+1
#使用0再次初始化模式,用于搜索数据中的下一个元素。
其他:
j=0#直接移动到第0个索引。
i+=1
计数=0#如果连续未按照模式找到数据,则将再次从0开始计数。
#搜索的模式出现的次数大于0,而其仅表示找到了该模式。
如果c>0:
返回c;
其他:
返回-1;
输入:ABCABC
输出:模式发现:5次

谢谢,我现在才发现,但是如果两个条件不在同一水平上,它在javascript中是如何工作的呢?谢谢Lulian我现在理解得更好谢谢,现在理解得很好
for x in range(4)
for(x = 0; x < 4; x++)
a = "Rainbow"
b = "Rain"
def SubStrInStr(Str, SubStr):
   count = 0
   for i in range(len(Str)):
       for j in range(len(SubStr)):
           # print (j)
           if (a[i + j] != b[j]):
               break
           if (j+1 == len(SubStr)):
               count+=1
return count
print(SubStrInStr(a, b))here
def naive_pattern_search(data,search):
n = len(data) #Finding length of data
m = len(search) #Finding length of pattern to be searched.

i = 0
count = c = 0 #Taking for counting pattern if exixts.
for j in range(m-1):#Loop continue till length of pattern to be Search.
    while i <= (n-1):#Data loop
        
        #if searched patten length reached highest index at that time again initilize with 0.
        if j > (m-1):
            j = 0
        
        #Data and search have same element then both Index increment by 1.
        if data[i]==search[j]:
            #print(f"\n{ data[i] } { search[j] }")
            #print(f"i : {i}  {data[i]}   j : {j}  {search[j]}")
            i+=1
            j+=1
            count+=1
            
            #If one pattern compared and found Successfully then Its Counter for pattern.
            if count== (m-1):
                c = c + 1
        #Initilise pattern again with 0 for searching with next element in data.
        else:
            j = 0 #Direct move to 0th index.
            i+=1
            count=0 #If data not found as per pattern continuously then it will start counting from 0 again.

#Searched pattern occurs more then 0 then its Simply means that pattern found.
if c > 0:
    return c;
else:
    return -1;