我想编写一个代码,在另一个数组中找到char数组,并打印出第一个数组的第一个出现的位置(元素)。我写了我自己的代码,它可以工作。但“看上去”有点乱。有没有人有更好的想法重写这段代码?
“只允许strlen()。我需要通过设计循环来编写它。”
这是密码
#include <iostream>
#include <string.h>
using namespace std;
const int len = 100;
int main() {
int i, j, k, l;
char a[len]="leonardo" , b[len]=
我有一个字节数组(可以得到非常大的,超过3200万字节),我需要用相同长度的其他子数组替换一些子数组。我目前的方法是在字节数组中搜索需要替换的所有子数组,每次找到一个子数组时,都将子数组的索引添加到列表中,然后继续。
我的代码如下。我有一种纠结的感觉,那就是这不可能是有效的,因为3200万字节需要10秒以上的时间来完成搜索和替换。我给它传递了8个要替换的字符串,所以基本上它最终会搜索16个子数组。
有没有人看到我的算法有什么缺陷或者更有效的?
附注:在这段代码中,我实际上并没有替换它们,只是找到索引。我的代码应该是非常高效的。
public class Search
{
public
我很好奇什么是最有效的算法(或常用的)来计算字符串在文本块中出现的次数。
从我的来看,Boyer-Moore字符串搜索算法是字符串搜索的标准算法,但我不确定以一种有效的方式计算出现次数是否与搜索字符串相同。
在Python中,这是我想要的:
text_chunck = "one two three four one five six one"
occurance_count(text_chunck, "one") # gives 3.
编辑:似乎python str.count就是这样一种方法;但是,我找不到它使用的是什么算法。
我有一个50000+字符串的列表,平均长度为1000个字符。我可以这样做一个简单的查询:
data.Where(c => c.Contains(query));
但我的猜测是,在表现方面,这并不是最好的方式。当你试图提高搜索的性能时,你的建议是什么?
我尝试过的事情:
/*** Worst ***/
var result = new List<string>();
foreach (var row in data)
{
if (row.Contains(query))
result.Add()
}
/*** Medium ***/
data.Wher
我在列表中存储了300 K字符串,每个字符串的长度在10到400之间。我想删除其他字符串的子字符串(长度较短的字符串更有可能成为其他字符串的子字符串)。
目前,我首先根据长度对这些300 K字符串进行排序,然后使用下面的方法。
sorted_string = sorted(string_list, key=length, reverse=True)
for item in sorted_string
for next_item in sorted_string[sorted_string.index(item)+1:]
if next_item in item:
这是我们在一个项目管理系统中使用的一种蛮力算法,用于从摘要中提取关键字。这个蛮力算法的时间复杂度是多少?它是NP-硬,NP-完全,在NP,还是在P?
这就是算法:
public static int search(String pattern, String text) {
int M = pattern.length();
int N = text.length();
for (int i = 0; i < N - M; i++) {
int j;
for (j = 0; j < M; j++) {
if (text.charAt(i+j)
jdk中字符串类的indexOf方法是用BF实现的,为什么不使用KMP或BM?下面是jdk如何实现这一功能。它用BF来解决。为什么不使用一种更有效的方法,如KMP,BM?
static int indexOf(char[] source, int sourceOffset, int sourceCount,
char[] target, int targetOffset, int targetCount,
int fromIndex) {
if (fromIndex >= sourceCou
当我阅读时,使用reversed函数反转字符串比使用片表示法string[::-1]更有效。但当我亲自尝试时,我观察到了不同的结果。
首先,我试着做一根很大的绳子。然后,我试着检查需要多少时间来检查字符串是否存在于大字符串中。我就是这样做的:
In [1]: large = "abcdefgijklmnopqrstuvwxyz1234567890!@#$%^&*()_=+0}{QWERT"
In [2]: large =
我正在编写一个bash脚本,它是一个使用pi应用程序的“包管理器”。我想实现一个搜索功能,以便我可以搜索应用程序。现在我要做的是(模板是一个我不想列出的文件夹):
#test-search.sh
PI_APPS_DIR="$HOME/pi-apps"
function list-all() {
for dir in $PI_APPS_DIR/apps/*/; do
dirname=$(basename "$dir")
if [[ "$dirname" != "template" ]];
今天我弟弟问了我一个问题,问题如下:
Given a list of strings & string M28K, where M28K represents a string which starts
from M, ends with K and has 28chars in between . Find if M28K is unique in the
list of strings or not?
为了找到问题的解决方案,我采用了以下算法:
对于每个字符串:
find string length(L)
if(L==30) then
if(str[0]==
给定一个字符串和一个非空子字符串,递归计算以该子字符串开头和结尾的最大的子字符串,并返回其长度。
我所做的没有返回正确的长度。但是因为我已经保存了所有可能的子串,所以我可以确定长度。时间复杂度应该是线性的: O(n)。
这是我尝试过的:
public class StringPatternMatcher {
static String[] array = new String[10];
static int n = 0;
public static int findSubString ( String s, String pat) {
if ( s.length() &
我已经看到了这个算法的几个实现,例如具有2个计数器和前缀迭代的实现,或者使用递归的实现。然而,我很难理解使用动态编程的方法。
由于我的知识肤浅,这是我设法想出的:
def sufperf(S):
Pi = [0 for i in range(len(S))]
for i in range(1, len(S)):
p = Pi[i - 1]
while p > 0 and S[i] != S[p]:
p = Pi[p-1]
if S[i] == S[p]:
p += 1
我的字符串类型为"abacsdsdvvsg"或"a a a a a a a"
我使用String[] stringArray = s.split("");或String[] stringArray = s.split(" ");
我想知道(在O(string length)中)上述拆分的复杂性是什么?
PS:我知道如何计算O(.)如果给出了密码。这里我不知道分裂函数的算法。