题目:我们把字符串A中符合下列属性的任意连续子串 B 称为“谷底”:存在0<i<B.length-1使得B[0]>B[1]>......B[i-1]>B[i]<B[i+1]<......<B[B.length>=3]。输入一个整数字符串A,输出最长“谷底”和“谷底”长度;如果不含有“谷底”则输出不存在谷底。

我是一个大一新生,这个是我们学校工作室的考核题的内容之一。作为一个还没接触过算法,C语言也接触不久的萌新,可以说这一题对我来说挺有挑战性的。

如果看成一个函数 如图                                                                                         A:代表字符串A    B:代表字符串B

这一题的要点是需要在字符串A中寻找到字符串B并且找到最长的字符串B

我一开始的思路是先找到每一个字符串B的左边第一个字符,然后先找B的单调递减区间,再找单调递增区间,把两个区间合起来组合成一个字符串B的区间,区间的长度为字符串B的长度,在比较每一个字符串B的长度,找到最长的字符串B。后来发现如果这样去解这一个题目的话会使的代码过于冗长,且需要的变量十分的多

后来我一个同学给了我一个新的思路那就是通过锚定字符串B中最小的字符来确定每一个字符串B的位置,然后从这个位置向两边寻找字符串B的边界。

如图                                                 

 这一种方法无疑比我之前的方法更加方便使用代码实现

上代码

#include<stdio.h>
#include<string.h>//为了使用字符数组
int main()
{char number[20] = {};//定义一个字符数组用来储存每一位数字int len=0,len_1=0,len_2=0;//用来确定数组长度,谷底区间长度int i, k,h;//用来作为数组下标printf("输入:");getchar();gets_s(number);//把数字作为字符串放入数组中len = strlen(number);//求得字符串长度数。for (i = 0; i <= len - 1; i++){if (number[i]<number[i - 1] && number[i + 1]>number[i])//用于求出谷底数位置{for (k = i; number[k + 1] > number[k]; k++){}//用于求右峰位置for (h = i; number[h - 1] > number[h]; h--){}//用于求左峰位置len_1 = h + k - 3;//求出谷间长度if (len_2 >= len_1)//求出最长谷间长度len_1 = len_2;}}printf("输出:%d", len_1);if (len_1 == 0)printf("解释:不含谷底");else{printf("解释:最长谷底是");for (h = h; h <= k; h++)//输出谷间{printf("%c", number[h]);}printf("长度为:%d", len_1);}return 0;
}

这就是使用这一种方法的解题代码

其中的关键在于

for (i = 0; i <= len - 1; i++){if (number[i]<number[i - 1] && number[i + 1]>number[i])//用于求出谷底数位置{for (k = i; number[k + 1] > number[k]; k++){}//用于求右峰位置for (h = i; number[h - 1] > number[h]; h--){}//用于求左峰位置len_1 = h + k - 3;//求出谷间长度if (len_2 >= len_1)//求出最长谷间长度len_1 = len_2;}}
  • 使用第一个循环来检索数组中的每一个字符元素。
  • 使用一个判断来确定每一个字符串B的最小字符。
  • 使用两个循环来分别找出左值和右值。
  • 使用一个判断来找到最大字符串B长度。

这一个方法不仅可以作用于这一个题目还可以用于其他类似的题目,其符合的条件应该要满足

1、在一长串的数中找一段数

2、每一段数存在对称性

如果这两个条件满足大概率是可以运用这一个方法解决问题的。

                                                                                                     第一次写博客,如果有不对的地方欢迎各位大佬的斧正。

“谷底”类题目及一些自己的思考相关推荐

  1. 河北省国家电网计算机专业,河北省国家电网计算机类题目库.doc

    河北省国家电网计算机类题目库 一.单项选择题 习题一 计算机基础知识 1.世界上首次提出存储程序计算机体系结构的是 .冯·诺依曼 A. 查尔斯· 巴贝奇 B. 阿伦· 图灵 C. 乔治· 布 尔D.冯 ...

  2. 2020年国考申论备考:评价类(观点)题和理解类题目的辨析

    2020年国考申论备考:评价类(观点)题和理解类题目的辨析 提起申论,很多人对理解类和评价类这两种题型会感到头疼,一方面是材料相对较为分散.复杂,另一方面就是答题逻辑和答案的梳理也比较繁琐.甚至有时候 ...

  3. 蓝桥杯——机器人行走(模拟类题目)Java语言实现

    目录 1.题目内容: 2.解题思路 2.1.小车方向描述: 2.2.字符串指令分解 2.2.1.正则表达式法 2.2.2.数组分解法 原题OJ平台链接:https://www.lanqiao.cn/p ...

  4. 漫画:震惊!直觉误判类题目在面试时是如何坑人的?

    今天是小浩算法"365刷题计划"第74天.继续为大家分享一道有趣的概率类问题(是有小伙伴咨询我的,在面试时会被问到哈~) 01 PART 硬币问题 小知识:硬币类型的问题经常会被用 ...

  5. 产品经理之产品类题目

    文章目录 一.设计类目 1.1 题目举例 1.2 题目拆解 1)审题 2)用户需求 3)产品设计 4)结构化表达 二.改进类题目 2.1 题目举例 2.2 题目拆解 1).用户维度 2).需求分析 3 ...

  6. c++账户类 题目描述

    账户类 题目描述 定义一个基类Account,数据成员包含string类变量userName用于保存账户主人姓名,函数成员包括默认构造函数.带参构造函数用于初始化数据成员和输出姓名的成员函PrintN ...

  7. 力扣刷题心得(设计类题目)

    设计类题目基本考察的是你对现实事物的抽象能力,一般会遇到一些类的设计.字符串切分.集合的使用(list.map.set.stack.deque)等,结束后我会更新一些关于这些集合的常见使用方法和场景. ...

  8. 二元一次函数最值问题_初二上学期,一次函数方案设计最值问题,两类题目解题思路不一样...

    方案设计问题在一元一次方程实际问题中有所接触,在一次函数实际应用题中也有.一次函数中的方案设计问题,常与一次函数的性质.不等式(组).方程组等知识点相结合,这类题目一旦掌握解题方法,难度不是很大.本篇 ...

  9. 20210310 20210311 :栈、队列、堆类题目合集

    栈.队列.堆类题目合集 写在前面 题目列表 思路分析 代码实现 写在前面 栈.队列.堆基本的题目就是这些,需要特殊技巧的另算,重写一遍保证熟练掌握这些题目并且达到熟练使用的程度.记录以便后续再次学习. ...

最新文章

  1. 《虚拟化与云计算》读书感(三)数据中心的概述
  2. Python控制流:顺序结构、分支结构、循环结构+for、if ... else、while、if... elif...elif..else、if
  3. 100c之50:到底谁在说谎
  4. python小学生教材-python纳入小学生教材,以后该如何辅导娃的作业?
  5. html5调盒子边框大小,CSS3 - 盒子大小(CSS3 - Box Sizing)
  6. 详解@Autowired、@Qualifier和@Required
  7. 在Application_Error事件中获取当前的Action和Control
  8. 2016大数据发展7大趋势
  9. C#设计模式之18-备忘录模式
  10. APIO/CTSC2017游记
  11. 苹果开机启动参数说明
  12. 使用Visual Studio开发游戏——微软宣布与Unity、Unreal Engine和Cocos展开全新合作
  13. ZeroMQ API简介
  14. 必须全网曝光这几个公众号
  15. thinkphp5 mysql加1_ThinkPHP5.1的数据库链接和增删改查
  16. html期末作业代码网页设计 我的家乡网站设计——我的家乡-四川成都(4页) HTML+CSS+JavaScript
  17. mysql mtq_Mysql常用简介 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
  18. 黄金分割法 ( 三分法 )
  19. Android 隐藏/透明小白条
  20. 嵌入式系统与通用计算机系统的区别,嵌入式操作系统和通用计算机系统两者有什么不同之处...

热门文章

  1. VS MFC Dlg
  2. 关于MFC中的MS Shell Dlg字体
  3. python热图_Python-Seaborn热图绘制的实现方法
  4. 永磁同步电机矢量控制(三)——电流环转速环 PI 参数整定
  5. 蓝牙解码格式哪个最好_蓝牙耳机哪个品牌最好?百位声学工程师说了真心话!_...
  6. !! MACD战法总结
  7. January 04th, 2018 Week 01st Thursday
  8. 软件测试职业发展规划
  9. softmax+cross-entropy的前向计算、反向传播的公式推导
  10. 传奇从这里诞生--JAVA的N个十