`

字符串中单调递增连续子序列——Bash

阅读更多

该问题和求单调递增子序列有点像,但不一样。

其主要区别就是在于连不连续,如果不要求连续(单调递增子序列)在实现时的算法是动态规划,比较复杂。

本文描述的问题是子序列连续的问题,相比而言会简单很多,原理和求最大值是一样的。

 

具体描述为给定一个字符串,求一个子串,该子串满足:

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}";

 

 

 

在扫描过程中,记下目前为止最长的单调递增序列的开始和长度,并在当扫描中出现“拐弯”情况时,将新的递增子序列与当前记录中的最长单调递增子序列比较。

 

运行结果为:

 

 

 

该方法和给定一个数组,求数组中最大元素的方法是一回事。

 

此外,如果你想求最长单调递减子序列,则只需要改变上述代码中的一个字符就可以了,你知道是哪个吗?哈哈^_^

 

 欢迎来拍!!!

  • 大小: 8.4 KB
1
0
分享到:
评论

相关推荐

    BASH 中的字符串处理

    字符串处理是BASH编程中的重要组成部分,它允许用户对文本数据进行操作,包括截取、替换、比较等。这篇博文将深入探讨BASH中的字符串处理技巧。 一、字符串定义与赋值 在BASH中,字符串可以被赋值给变量,常见的...

    bash过滤字符串的命令介绍

    在Linux系统中,Bash shell提供了一系列强大的命令来处理字符串,这些命令包括grep、sed、cut等。本文将详细介绍这些命令的功能、参数及其使用方法。 首先,让我们来看看grep命令。grep全称为Global Regular ...

    test.bash——bash的语法例程

    主要是bash语法的例程,在记录学习笔记的时候做练习用的。学习记录请参考:https://blog.csdn.net/xiaodouhao123456/article/details/109473083,及其所在专栏中的其他笔记。

    bash写的字符串常用函数

    bash写的字符串常用函数,这个可以看看。资源分就免了

    deline一个ES6字符串标记能够删除多行字符串中多余的换行

    在JavaScript开发中,字符串处理是一项常见的任务,尤其是在处理多行文本时。ES6引入了许多新的语法特性,使得处理字符串变得更加方便。"deline"是一个专为处理多行字符串设计的库,它专注于删除多余的换行符,从而...

    linux 字符串操作

    获取字符串中的特定字符或子字符串的方法有很多。 1. **使用 `tr -cd` 和 `wc -c`:** ```bash $ echo $var | tr -cd 'g' | wc -c 2 ``` 此命令组合用于统计字符串中出现的指定字符 `g` 的次数。 2. **使用 `...

    shell 字符串操作

    子字符串截取** - **${string:position}**: 从指定位置开始截取字符串。 - 示例: ```bash str="Hello World" echo "${str:6}" # 输出: World ``` - **${string:position:length}**: 从指定位置开始截取指定...

    shell中字符串截取

    ### Shell中字符串截取 在Shell脚本编程中,对字符串进行截取是常见的操作之一。通过对字符串的处理,可以实现各种数据解析、文件名提取等实用功能。本文将详细介绍几种常用的Shell中字符串截取方法及其应用场景。 ...

    Shell脚本中计算字符串长度的5种方法

    ### Shell脚本中计算字符串长度的五种方法 在日常的Shell脚本开发工作中,我们经常需要处理字符串,其中计算字符串长度是一个常见的需求。本文将详细介绍五种在Shell脚本中计算字符串长度的方法,并对每种方法进行...

    C语言合并多个char *类型的字符串

    在C语言中,合并多个`char *`类型的字符串是一项常见的任务,这通常涉及到字符串操作和内存管理。在给定的场景中,`main.c`文件是测试程序,它调用了`tools.h`头文件中定义的`MultiCombine`函数,这个函数的目的是将...

    shell 批量处理 字符串指令行

    - 数据清理:批量替换或删除文件中的特定字符或字符串。 - 自动化配置:根据模板文件生成多份配置文件,只需改变其中的某些变量。 例如,以下是一个简单的示例脚本,它读取`curl-test.txt`文件,将所有URL中的`...

    Shell编程范例之字符串操作-TinyLab原创

    在计算机科学中,字符串是由有限字符序列构成的,属于线性表的一种数据结构,它能够表示文本数据。字符串中的字符可以是数字、字母、特殊符号等。对于字符串的类型,常见的判断方法包括判断字符串是否只包含数字、...

    Pbjson字符串生成与解析

    反向操作,解析Json字符串到protobuf对象时,Pbjson会解析Json字符串中的键值对,将其映射到protobuf消息的相应字段。 值得注意的是,根据提供的描述,“PBJson用于解析和生成Json结构的字符串,没有涉及Json嵌套...

    java 文本字符串替换工具

    在Java编程语言中,文本字符串替换是一个常见的任务,特别是在处理大量文本数据时。这个"java 文本字符串替换工具"很可能是为了帮助开发者高效地搜索和替换文件中的特定文本内容。让我们详细了解一下如何在Java中...

    Base64文本字符串解码编码双向解析转换工具

    解码过程则是相反的,首先对Base64编码的字符串进行解析,恢复出6位的块,再将这些块组合成原始的字节序列,最后根据UTF8编码规则将字节序列还原为文本字符串。 这个工具的双向解析转换功能意味着它可以实现两个...

    检验字符串是否包含简体字(针对繁体字和简体字不同的情况)

    在IT行业中,字符串处理是一项基础且重要的任务,尤其是在文本分析、自然语言处理和信息检索等领域。本主题聚焦于“检验字符串是否包含简体字”,这是一个常见的需求,特别是在处理中文文本时,尤其是当文本中可能...

    Bash字符串常用操作

    本文档详细介绍了Bash字符串操作中的参数扩展功能,该功能允许用户根据变量的值或是否存在来动态地替换变量值。参数扩展是Bash编程中常用的技术之一,尤其适用于编写脚本时变量处理。以下是根据文档内容总结的各个...

    字符串查找替换(批量任何文件)

    1. 字符串:在计算机科学中,字符串是由一个或多个字符组成的序列,常用于表示文本信息。 2. 查找:查找是指在数据结构中寻找特定字符串的过程。这可以是线性查找,也可以是更高效的方法如二分查找或哈希表查找。 ...

    命令行下在文件中查找并替换匹配的字符串的工具

    当我们需要在大量文本文件中快速查找并替换特定字符串时,`sed`(Stream Editor)就是一个非常强大的工具。`sed` 是一个流编辑器,它可以从输入流(通常是文件或管道)中读取数据,对数据进行处理,然后将处理后的...

Global site tag (gtag.js) - Google Analytics