首页 > 其他分享 >【数据结构】串 - 习题

【数据结构】串 - 习题

时间:2023-04-03 22:22:54浏览次数:48  
标签:子串 字符 cnt int 样例 dat 习题 数据结构

就一道题,开摆了orz

习题

等值子串

【问题描述】如果字符串的一个子串(其长度大于1)的各个字符均相同,则称之为等值子串。试设计一算法,求出串S中一个长度最大的等值子串;如果串S 中不存在等值子串,则输出信息no

【输入形式】输入一个字符串,并以!结束

【输出形式】输出第一个出现的最长字符串,如果没有输出no

【样例输入】aabc123abc123cc!

【样例输出】aa

【样例输入】abceebccadddddaaadd!

【样例输出】ddddd

char dat[10086];
int main()
{
    // 输入部分
    int tmp=0;
    do
    {
        dat[tmp] = getchar();
    } while (dat[tmp++]!='!');

    // 处理部分
    // p指向当前处理到的位置。当然也可用int来替代,此时表示的是数组下标。
    // last变量存储上一个字符是什么,用于计数
    // cnt表示的是当前的连续字符数目(包含目前的字符);ans表示的是最大连续字符数
    // ansp指针指向达成最大连续字符的位置(一串连续字符的最后一个)
    char *p = dat;
    char last=0;
    int cnt,ans=0;
    char *ansp = NULL;
    do
    {
        // 如果当前字符和上一个一样,则计数器+1,否则归1
        if(*p==last)
            cnt++;
        else
            cnt=1;
        // 如果当前连续字符数刷新了记录,则标记位置
        // 不取等号是因为要求“第一个出现的最长字符串”
        if(ans<cnt)
        {
            ans = cnt;
            ansp = p;
        }
        last = *p;
    }
    while(*(p++)!='!');

    // 结果输出部分
    // 通过ans和ansp反推出最长字符串的起始位置
    p = ansp-ans+1;
    if(ans>1)
        for(int i=1;i<=ans;i++)
            putchar(*p);
    else
        printf("no");
    putchar('\n');
    return 0;
}

标签:子串,字符,cnt,int,样例,dat,习题,数据结构
From: https://www.cnblogs.com/marshuni/p/17284687.html

相关文章

  • 【数据结构】二叉树先序、中序、后序及层次遍历(C语言版)
    一、图示展示1.先序遍历先序遍历可以想象为,一个小人从一棵二叉树根节点为起点,沿着二叉树外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果先序遍历结果为:ABDHIEJCFKG动画演示:记住小人沿着外围跑一圈(直到跑回根节点),多看几次动图便能理解2.......
  • 第06章 索引的数据结构
    1.为什么使用索引索引是存储引擎用于快速找到数据记录的一种数据结构,就好比一本教科书的目录部分,通过目录中找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查看查询条件是否命中某条索引,符合则通过索引查找相关数据,如果不符合则需要全表......
  • C++ Primer 第五版 第十一章 练习题编程题目答案
    https://github.com/jzplp/Cpp-Primer-Answer练习11.1map用关键字索引,是一个字典。vector用整数索引,是一个列表。练习11.2list链表vector顺序列表deque双端队列map字典set集合练习11.311.3map单词计数程序代码练习11.411.4去标点map单词计数程序代码练习11.5如果关键......
  • 数据结构 第三章 栈与队列
    之前期末考试,大部分都是二叉树,先根遍历之类的,还有一些辨析题目,一些很零碎的知识点,关于二叉树,这些的栈1.栈的概念首先对于线性表来说,线性表的插入和删除操作可以在任意的位置进行,而栈的插入和删除操作只允许在表的尾端进行。栈中,允许进行插入和删除操作的一端称为栈顶,另一端称......
  • Python 数据结构与算法详解
    一、数据结构与算法1、算法提出1.算法概念算法是计算机处理信息的本质,因为计算机程序本质上是一个算法来告诉计算机按照确切的步骤来执行一个指定的任务。一般地,当算法在处理信息时,会从输入设备或数据的存储地址读取数据,把结果写入输出设备或某个存储地址供以后再调用。算法是独立......
  • linux内核数据结构 --- list_head
    以structkobject为例,讲解如何使用链表structlist_headstructkobject{constchar*name;structlist_headentry;structkobject*parent;...};structlist_head类型变量作为structkobject的成员(从面向对象的角度,也可以看成str......
  • 02142数据结构导论-考试大纲思维导图
    第一章第二章第三章第四章第五章第六章第七章思维导图下载地址(MindMaster绘制):链接:https://pan.baidu.com/s/1kaoT394M-EG3w05sdC9eqQ?pwd=6060提取码:6060......
  • 数据结构之二叉树
    树是一种非线性数据结构,是由n(n>=0)个有限节点组成的一个具有层次关系的集合。树的逻辑结构看起来像一棵倒挂的树,根朝上,叶子朝下。树一般是递归定义的,每一棵树都可以认为是由根和其子树构成,且各个子树不相交。树树的相关概念节点的度:一个节点含有的子树的个数称为该节点的度;叶节......
  • 第三章习题
    本章习题共17道习题,主要考察了1.外测度的定义与性质。代表题目为1-4、16(1)题。2.可测集的定义和可测的等价条件,即证明一个集合可测。代表题目为第5、9、10、15、16(2)、17题。3.可测集的性质,利用可测集的性质证明等式或不等式。代表题目为第6、7、8、11、12、13、14题。......
  • 数据结构:栈的进出
    进栈序列为1,2,3,4,进栈过程中可以出栈,则下列不可能的出栈序列是(C)A、1,2,3,4 B、2,3,1,4 C、3,1,2,4 D、4,3,2,1[========]栈是先进后出。如果4先出,那么就是全部入栈了,只有4321一种情况。如果3先出,那么4还没有入栈,此时栈内只有1,2,3,出栈必有3→2→1的顺序,4可以在3,2,......