笔试题(1)
来源:互联网 发布:中国帝国 知乎 编辑:程序博客网 时间:2024/06/10 07:12
今天发现一道题,是某一个笔试的最后一道。我用C语言实现了一下。整体感觉不是很难,给大家分享一下。
来看题目:
给定一个 query 和一个 text,均由小写字母组成。
要求在 text 中找出以同样的顺序连 续出现在 query 中的最长连续字母序列的长度。
例如, query 为“acbac”,text 为 “acaccbabb”,
那么 text 中的“cba”为最长的连续出现在 query 中的字母序列,因此, 返回结果应该为其长度 3
总的来说就是在字符串里找寻匹配的小字符串的个数。
总体思路应该是:先从text中的’a’开始,与query中的’a’相等,两个都递增。text中的’c’与query中的’c’右相等,再两个递增。此时,text中的’b’不等于query中的’a’。返回到text中的’a’,query中的’c’(增了一位)。接下来就是text中的’a’开始,与query中的第二个字符’c’比较….,以此类推。等到text中的’a’与query中的字符比较完。在轮到’c’,再到’b’…,以此类推。
来看代码:
#include<stdio.h>#include<stdlib.h>#include<string.h>/*给定一个 query 和一个 text,均由小写字母组成。要求在 text 中找出以同样的顺序连 续出现在 query 中的最长连续字母序列的长度。例如, query 为“acbac”,text 为 “acaccbabb”,那么 text 中的“cba”为最长的连续出现在 query 中的字母序列,因此, 返回结果应该为其长度 3*///query:“acbac”//text:“acaccbabb”int query(char *query,char *text){ int i,j,len,len2,max = 0,count = 0; len = strlen(text); len2 = strlen(query); if(query == NULL || text == NULL || len <= 0) { return -1; } for(i=0;i<len;i++)//循环针对text { int tmp = i; count = 0; for(j=0;j<len2;j++) { if(text[tmp] == query[j])//相同的话同时移动 { count++; tmp++; if(count > max) max = count; } else { tmp = i; j -= count;//j-count就是之前的刚开始的j,之后j++就到了应该重新开始的位置 count = 0; continue; } } } return max;} int main(){ int max = query("ccbac","acdbabac"); printf("%d",max); return 0;}
结果:
3
经过人工的检查,结果正确。值得注意的是,我在文中是只返回了对应的数字,并没有返回匹配的那堆字符串,大家可以试试,怎么才能将匹配的字符串给返回出来。可以试着增加函数的参数,在文中将匹配的字符串保存下来,最后将这一字符串返回出来。代码的可能性是无穷的,大家都可以动手试试。
0 0
- 笔试题(1)
- 笔试题(1)
- 笔试题(1)
- 笔试题(1)
- 笔试题(1)
- 笔试题集锦(1)
- .NET笔试题(1)
- ADOBE笔试题(1)
- 笔试算法题(1)
- 华为笔试题(1)
- 腾讯笔试题(1)
- 笔试题集锦(1)
- C++笔试题(1)
- javascript笔试题(1)
- 刷刷笔试题~(1)
- 笔试题汇总(1)
- linux笔试题(1)
- 操作系统笔试题(1)
- C++11实现多线程 互斥锁与资源竞争问题
- text和checkbox只读属性的设置
- (转)数据库范式(1NF 2NF 3NF BCNF)详解一
- YARN的 Resource Manager的作用
- 设备驱动程序通知应用程序的几种方法
- 笔试题(1)
- MFC 使用JSONCPP
- 现代谜题
- python-shell-MySQL
- 内建函数basestring()
- 文件上传与下载
- 运行程序是内存溢出的情况:OutOfMemoryError: PermGenspace
- IOS之百度翻译API使用
- wince5.0下载链接