该问题和求单调递增子序列有点像,但不一样。
其主要区别就是在于连不连续,如果不要求连续(单调递增子序列)在实现时的算法是动态规划,比较复杂。
本文描述的问题是子序列连续的问题,相比而言会简单很多,原理和求最大值是一样的。
具体描述为给定一个字符串,求一个子串,该子串满足:
1. 连续
2. 该子串递增
3. 是最长的单调连续递增的子串
例如:zxuhababcba
结果:abc
代码如下:
#!/bin/bash ## the input str for test inputStr="zxuhababcba"; strLength=${#inputStr}; ## record the max monotone increasing sub str maxSubStrLength=0; maxStartPos=0; ## record the position of current monotone increasing sub str currentStartPos=0; ## find the result for((i=1;i<strLength;i++)) do j=$((i-1)); if [ "${inputStr:$i:1}" \< "${inputStr:$j:1}" ]; then currentSubStrLength=$((i-currentStartPos)); if [ $currentSubStrLength -gt $maxSubStrLength ]; then maxSubStrLength=$currentSubStrLength; maxStartPos=$currentStartPos; fi currentStartPos=$i; fi done lastLength=$((strLength-currentStartPos)); if [ $lastLength -gt $maxSubStrLength ]; then maxSubStrLength=$lastLength; maxStartPos=$currentStartPos; fi echo "original string is : ${inputStr}"; echo -n "max increasing subStr : " for((i=0;i<$maxStartPos;i++)) do echo -n " "; done echo "${inputStr:$maxStartPos:$maxSubStrLength}";
在扫描过程中,记下目前为止最长的单调递增序列的开始和长度,并在当扫描中出现“拐弯”情况时,将新的递增子序列与当前记录中的最长单调递增子序列比较。
运行结果为:
该方法和给定一个数组,求数组中最大元素的方法是一回事。
此外,如果你想求最长单调递减子序列,则只需要改变上述代码中的一个字符就可以了,你知道是哪个吗?哈哈^_^
欢迎来拍!!!
相关推荐
字符串处理是BASH编程中的重要组成部分,它允许用户对文本数据进行操作,包括截取、替换、比较等。这篇博文将深入探讨BASH中的字符串处理技巧。 一、字符串定义与赋值 在BASH中,字符串可以被赋值给变量,常见的...
在Linux系统中,Bash shell提供了一系列强大的命令来处理字符串,这些命令包括grep、sed、cut等。本文将详细介绍这些命令的功能、参数及其使用方法。 首先,让我们来看看grep命令。grep全称为Global Regular ...
主要是bash语法的例程,在记录学习笔记的时候做练习用的。学习记录请参考:https://blog.csdn.net/xiaodouhao123456/article/details/109473083,及其所在专栏中的其他笔记。
bash写的字符串常用函数,这个可以看看。资源分就免了
在JavaScript开发中,字符串处理是一项常见的任务,尤其是在处理多行文本时。ES6引入了许多新的语法特性,使得处理字符串变得更加方便。"deline"是一个专为处理多行字符串设计的库,它专注于删除多余的换行符,从而...
获取字符串中的特定字符或子字符串的方法有很多。 1. **使用 `tr -cd` 和 `wc -c`:** ```bash $ echo $var | tr -cd 'g' | wc -c 2 ``` 此命令组合用于统计字符串中出现的指定字符 `g` 的次数。 2. **使用 `...
子字符串截取** - **${string:position}**: 从指定位置开始截取字符串。 - 示例: ```bash str="Hello World" echo "${str:6}" # 输出: World ``` - **${string:position:length}**: 从指定位置开始截取指定...
### Shell中字符串截取 在Shell脚本编程中,对字符串进行截取是常见的操作之一。通过对字符串的处理,可以实现各种数据解析、文件名提取等实用功能。本文将详细介绍几种常用的Shell中字符串截取方法及其应用场景。 ...
### Shell脚本中计算字符串长度的五种方法 在日常的Shell脚本开发工作中,我们经常需要处理字符串,其中计算字符串长度是一个常见的需求。本文将详细介绍五种在Shell脚本中计算字符串长度的方法,并对每种方法进行...
在C语言中,合并多个`char *`类型的字符串是一项常见的任务,这通常涉及到字符串操作和内存管理。在给定的场景中,`main.c`文件是测试程序,它调用了`tools.h`头文件中定义的`MultiCombine`函数,这个函数的目的是将...
- 数据清理:批量替换或删除文件中的特定字符或字符串。 - 自动化配置:根据模板文件生成多份配置文件,只需改变其中的某些变量。 例如,以下是一个简单的示例脚本,它读取`curl-test.txt`文件,将所有URL中的`...
在计算机科学中,字符串是由有限字符序列构成的,属于线性表的一种数据结构,它能够表示文本数据。字符串中的字符可以是数字、字母、特殊符号等。对于字符串的类型,常见的判断方法包括判断字符串是否只包含数字、...
反向操作,解析Json字符串到protobuf对象时,Pbjson会解析Json字符串中的键值对,将其映射到protobuf消息的相应字段。 值得注意的是,根据提供的描述,“PBJson用于解析和生成Json结构的字符串,没有涉及Json嵌套...
在Java编程语言中,文本字符串替换是一个常见的任务,特别是在处理大量文本数据时。这个"java 文本字符串替换工具"很可能是为了帮助开发者高效地搜索和替换文件中的特定文本内容。让我们详细了解一下如何在Java中...
解码过程则是相反的,首先对Base64编码的字符串进行解析,恢复出6位的块,再将这些块组合成原始的字节序列,最后根据UTF8编码规则将字节序列还原为文本字符串。 这个工具的双向解析转换功能意味着它可以实现两个...
在IT行业中,字符串处理是一项基础且重要的任务,尤其是在文本分析、自然语言处理和信息检索等领域。本主题聚焦于“检验字符串是否包含简体字”,这是一个常见的需求,特别是在处理中文文本时,尤其是当文本中可能...
本文档详细介绍了Bash字符串操作中的参数扩展功能,该功能允许用户根据变量的值或是否存在来动态地替换变量值。参数扩展是Bash编程中常用的技术之一,尤其适用于编写脚本时变量处理。以下是根据文档内容总结的各个...
1. 字符串:在计算机科学中,字符串是由一个或多个字符组成的序列,常用于表示文本信息。 2. 查找:查找是指在数据结构中寻找特定字符串的过程。这可以是线性查找,也可以是更高效的方法如二分查找或哈希表查找。 ...
当我们需要在大量文本文件中快速查找并替换特定字符串时,`sed`(Stream Editor)就是一个非常强大的工具。`sed` 是一个流编辑器,它可以从输入流(通常是文件或管道)中读取数据,对数据进行处理,然后将处理后的...