码迷,mamicode.com
首页 > 其他好文 > 详细

笔试题(1)

时间:2015-04-02 19:00:58      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:c语言   字符串   查找   

今天发现一道题,是某一个笔试的最后一道。我用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

经过人工的检查,结果正确。值得注意的是,我在文中是只返回了对应的数字,并没有返回匹配的那堆字符串,大家可以试试,怎么才能将匹配的字符串给返回出来。可以试着增加函数的参数,在文中将匹配的字符串保存下来,最后将这一字符串返回出来。代码的可能性是无穷的,大家都可以动手试试。

笔试题(1)

标签:c语言   字符串   查找   

原文地址:http://blog.csdn.net/tomjohnson/article/details/44834207

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!