新闻动态
新闻动态
NEWS INFORMATION

SQL计算字符串中最大的递增子序列的方法

发布日期:2022-01-17 17:17 | 文章来源:源码之家

求字符串中最大的递增子序列

数据库环境:SQL SERVER 2005

如题,求字符串“abcbklmnodfghijkmer”中最大的递增子序列。这个字符串有点特别,

只由26个小写字母a-z组成。

大概思路如下:

1.将字符串转到一列存储,并生成行号

2.设置一个递增计数器列,默认为1,比较上下行的字符,如果在字典中的顺序是递增,

则计数器加1,否则,计数器置1

3.找出计数器最大的数及对应的行号,根据这2个数截取字符串

思路有了,下面直接贴代码

DECLARE @vtext VARCHAR(255)
SET @vtext = 'abcbklmnodfghijkmer'
/*讲字符串转成一列存储,并生成行号*/
WITH x0
   AS ( SELECT number AS id ,
      SUBSTRING(@vtext, number, 1) AS letter
    FROM  master.dbo.spt_values
    WHERE type = 'P'
      AND number <= LEN(@vtext)
      AND number >= 1
    ),/*实现计数器*/
  x1 ( id, letter, clen )
   AS ( SELECT id ,
      letter ,
      1 AS clen
    FROM  x0
    WHERE id = 1
    UNION ALL
    SELECT x0.id ,
      x0.letter ,
      CASE WHEN x1.letter <= x0.letter THEN x1.clen + 1
        ELSE 1
      END AS clen
    FROM  x0 ,
      x1
    WHERE x0.id = x1.id + 1
    )
 /*截取字符串*/
 SELECT SUBSTRING(@vtext, start, sublen) AS 最大子序列
 FROM ( SELECT id ,
      clen ,
      MAX(clen) OVER ( ) AS maxclen ,
      id - MAX(clen) OVER ( ) + 1 AS start ,
      MAX(clen) OVER ( ) AS sublen
    FROM  x1
   ) t
 WHERE clen = maxclen

求出的最大子序列是

通过以上的思路和代码,希望可以对大家有所启迪和帮助。

版权声明:本站文章来源标注为YINGSOO的内容版权均为本站所有,欢迎引用、转载,请保持原文完整并注明来源及原文链接。禁止复制或仿造本网站,禁止在非www.yingsoo.com所属的服务器上建立镜像,否则将依法追究法律责任。本站部分内容来源于网友推荐、互联网收集整理而来,仅供学习参考,不代表本站立场,如有内容涉嫌侵权,请联系alex-e#qq.com处理。

实时开通

自选配置、实时开通

免备案

全球线路精选!

全天候客户服务

7x24全年不间断在线

专属顾问服务

1对1客户咨询顾问

在线
客服

在线客服:7*24小时在线

客服
热线

400-630-3752
7*24小时客服服务热线

关注
微信

关注官方微信
顶部