社区
数据结构与算法
帖子详情
请教一个求字符串频率的问题
3661512
2005-05-25 08:40:41
字符串统计:输入两个字符串,一个长串,一个短串,计算短串在长串中出现的频率.
要求:用标准的C语言完成,不允许调用任何系统库函数,并且只能用一层循环.
...全文
135
11
打赏
收藏
请教一个求字符串频率的问题
字符串统计:输入两个字符串,一个长串,一个短串,计算短串在长串中出现的频率. 要求:用标准的C语言完成,不允许调用任何系统库函数,并且只能用一层循环.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Alonefield
2005-06-06
打赏
举报
回复
楼上犯了一个错误,用KMP寻找的复杂度应当为 O(m+n)
正确的做法是在模式串最后添加一个不可能出现的字符,进行匹配。
匹配到最后一个字符的时候计数器加1即可。
AdenPlus
2005-05-26
打赏
举报
回复
没想到给楼主抢先了,没错,就是KMP
Zephyrzzz
2005-05-26
打赏
举报
回复
用KMP吧,用的是一重循环,其实最坏情况也是O(nm)的,因为计算次数时i指针要回溯.
int get_next(char p[]){
int i=0,j=-1;
next[0]=-1;
while(i<n2-1){
if(j==-1||p[i]==p[j]){
i++;j++;
if(p[i]!=p[j])next[i]=j;
else next[i]=next[j];
}
else j=next[j];
}
return 0;
}
int KMP(char S[],char P[]){
int i=0,j=0,freq=0;
while(i<n1){
if(j==-1||S[i]==P[j]){
i++;j++;
}
else j=next[j];
if(j>=n2) freq++,i-=n2-1;
}
return freq;
}
void main()
{
scanf("%s",s);
scanf("%s",p);
n1=strlen(s); //不准用strlen就自己写个循环吧^_^
n2=strlen(p);
get_next(p);
printf("%d\n",KMP(s,p));
}
3661512
2005-05-26
打赏
举报
回复
怎么没有人啊,我自己顶
sunman1982
2005-05-25
打赏
举报
回复
up
3661512
2005-05-25
打赏
举报
回复
这是我写的双循环的方法
int PingLv(char *szStr,char *szSubstr)
{
int n = 0,k = 0,nStr,nSubstr,nCount = 0;
nStr = strlen(szStr);
nSubstr = strlen(szSubstr);
for(n = 0;n < nStr;n++)
{
for(k = 0 ;k < nSubstr;k++)
{
if(szStr[n+k] != szSubstr[k])
break;
else
{
if(k == nSubstr - 1)
nCount++;
}
}
}
return nCount;
}
int szlen(char *szStr)
{
int nlen = 0;
while(szStr[nlen] != 0)
nlen++;
return nlen;
}
3661512
2005-05-25
打赏
举报
回复
to sunman1982
大哥,用C啊,而且不能用任何库函数,sizeof,strlen这些都不能用.
sunman1982
2005-05-25
打赏
举报
回复
呵呵 只是能工作而已……
sunman1982
2005-05-25
打赏
举报
回复
#include<iostream>
#include<string>
using namespace std;
int main()
{
int i=0;
string s1("abcdabcdabs1cd"),s2("ab"),s3;
string::size_type pos=0;
int Len1=s1.size();
int Len2=s2.size();
int x=Len1-Len2;
for(pos=0;pos<=x-1;++pos)
{
if(s1[pos]==s2[0])
{
s3=s1.substr(pos,s2.size());
if(s3==s2)
i++;
}
}
cout<<i<<endl;
system("pause");
}
3661512
2005-05-25
打赏
举报
回复
用两层循环的方法我已经做出来了,现在需要做一层循环,希望大家多多帮忙.
jp1984
2005-05-25
打赏
举报
回复
不可能只有一层循环, 因为涉及到模式匹配。
Python 47个
字符串
方法
# Python 47个
字符串
方法## 课程介绍同学们是否总是要搜资料、查官网后,才知道怎么操作
字符串
?如果是,来学学本课程吧,本课程以讲解官网文档的方式,讲解 Python 47个
字符串
方法,涉及替换、删除、连接、查找、...
python 编程题目1:统计
字符串
中数字出现的
频率
pythone编程题,统计
字符串
中数字出现的
频率
python L1 研发工程师 编程 统计
字符串
数字出现的
频率
python L1 研发工程师 编程题 统计
字符串
数字出现的
频率
js长度超过1逗号分开_js怎么用逗号或者换行分割
字符串
公告: 为响应国家净网行动,部分内容已经删除,感谢读者理解。话题:js怎么用逗号或者换行分割
字符串
回答:使用split()分割 str="2,2,3,5,6,6"; 这是一
字符串
var strs= new Array(); 定义一数组 strs=str.split(","); 字符分割 for (i=0;ilt;strs.length ;i++ ) { document.write(str...
“Python 语言程序设计实验2023春季”实验三
字符串
与正则表达式
令
字符串
s='马丽于2022-4-29 10:10刊发了一首诗《Listen to me》,诗词的大意是:\n Mama you taught me to do the right things,\n So now you have to let your baby fly.\n You’ve。输入一
字符串
,各个子串之间按空白字符隔开,要
求
将其中的纯英文子串的大写字母改为小写,含数字的子串中的阿拉伯数字改写为对应的汉字,并且将所有空白字符改写为’%'。3 应用正则表达式提取该
字符串
中的日期时间
字符串
。
数据结构与算法
33,010
社区成员
35,327
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章