SQL计算字符串中最大的递增子序列的方法
求字符串中最大的递增子序列
数据库环境: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
求出的最大子序列是
通过以上的思路和代码,希望可以对大家有所启迪和帮助。
相关推荐
-
利用php+mysql来做一个功能强大的在线计算器
找了很久,发现网上资料很少,于是想自己动手写,慢慢的发现问题多了,自己不怎么通算法,写一个计算式子短点还好,长了就挂了,再长点恐怕就要死机. 有一天做做mysql突然发现原来mysql功能这么强大,可以直接计算字符串...哈哈 这下可就高兴了. 代码还超级简单 就做了一个ajax的计算器 有式子错误提示 还可以时时显示输入的式子 有兴趣的朋友可以看看 更多的功能可以自己去开发 演示地址:http://www.jianlila.com/jsq.php jquer.js自己去下载 jsq1.php
-
SQL语句计算两个日期之间有多少个工作日的方法
/* 因为工作中一个奇怪的需求,要用SQL语言计算两个日期间有多少个工作日. 设定是一个星期有5个工作日,从星期一到星期五 说明: 第一个星期的工作日数:DATEPART(dw, @begdt)-DATEPART(dw, @begdt),最少0天 末一个星期的工作日数:DATEPART(dw, @enddt),最多5天 计算方法: 如果两个日期处在同一个星期内,直接计算"第一个星期的工作日数" 否则按下面的公式计算 (两个日期间的总天数 - 第一个星期的天数 -
-
如何计算多个订单的核销金额
本文介绍了计算多个订单的核销金额的全部过程,运行数据库环境:SQL SERVER 2005,下面跟大家分享一下. 下图是一张订单明细表,现有金额要1700,根据订单单号的顺序依次对订单金额进行核销. 到支付订单6时,支付金额不足,只能支付200,后面订单的核销金额为0. 1.基础数据准备 CREATE TABLE #t ( id INT , dingdan VARCHAR(20), sale MONEY ) INSERT INTO #t VALUES (1,'a',100); INSERT IN
-
SQLSERVER 根据地图经纬度计算距离差示例
SQL SERVER 根据地图经纬度计算距离的公式 复制代码 代码如下: go --创建经纬度距离计算函数 CREATEFUNCTION [dbo].[fnGetDistance] --LatBegin 开始经度 --LngBegin 开始维度 (@LatBegin REAL, @LngBegin REAL, @LatEnd REAL, @LngEnd REAL) RETURNSFLOAT AS BEGIN --距离(千米) DECLARE @Distance REAL DECLARE @EAR
-
在php和MySql中计算时间差的方法
最近在研究自己爱围脖的时候就要计算到恋爱天数,这需要php根据每天的日期进行计算,下面就来谈谈实现这种日期计算的几种方法: (1) 如果有数据库就很容易了!若是MSSQL可以使用触发器!用专门计算日期差的函数datediff()便可! 若是MYSQL那就用两个日期字段的差值计算的计算结果保存在另一个数值型字段中!用时调用便可! (2)如果没有数据库,那就得完全用php的时间日期函数! 下面主要说明之: 例:计算1998年5月3日到1999-6-5的天数: 复制代码 代码如下: $startdat
-
mysql 字符串长度计算实现代码(gb2312+utf8)
PHP对中文字符串的处理一直困扰于刚刚接触PHP开发的新手程序员.下面简要的剖析一下PHP对中文字符串长度的处理: PHP自带的函数如strlen().mb_strlen()都是通过计算字符串所占字节数来统计字符串长度的,一个英文字符占1字节.例: $enStr = 'Hello,China!'; echo strlen($enStr); // 输出:12 而中文则不然,做中文网站一般会选择两种编码:gbk/gb2312或是utf-8.utf-8能兼容更多的字符,所以受到很多站长的喜爱.gbk与
-
用sql实现18位身份证校验代码分享 身份证校验位计算
身份证校验码的计算方法 1.将前面的身份证号码17位数分别乘以不同的系数.第i位对应的数为[2^(18-i)]mod11.从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 : 2.将这17位数字和系数相乘的结果相加: 3.用加出来和除以11,看余数是多少?: 4.余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字.其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2: 复制代码 代码如下: with
-
通过SQLSERVER重启SQLSERVER服务和计算机的方法
昨天和朋友在网上谈到SQL语句的应用,我朋友的远程服务器出现了无法连接的现象,问题的原因是远程服务器到达了最大连接数,为了实现远程重新启动,从而想到了用SQL语句命令实现这个功能,但是具体的命令格式给忘记了,找了点资料,把方法写在下面, 希望可以给大家一些帮助吧,呵呵 首先在本地计算机--创建重启脚本 复制代码 代码如下: declare @o int,@f int,@t int,@ret int exec sp_oacreate 'scripting.filesystemobject',@o
-
SQL2005CLR函数扩展-深入环比计算的详解
此类问题还可以延伸到类似进销存的批次计算中,这也要关注其他历史记录来决定当前某条记录的状态. sql语句无法简单实现mdx语句的类似功能,必须得用交叉表关联来对比.这里我们用CLR函数来实现mdx语句的类似语法.在select的时候把得到过的做个缓存就可以了.效率应该可以提高不少. clr的代码如下,编译为TestFun.dll,复制到sql服务器的文件目录下.--------------------------------------------------------------------
-
SQL计算字符串中最大的递增子序列的方法
求字符串中最大的递增子序列 数据库环境:SQL SERVER 2005 如题,求字符串"abcbklmnodfghijkmer"中最大的递增子序列.这个字符串有点特别, 只由26个小写字母a-z组成. 大概思路如下: 1.将字符串转到一列存储,并生成行号 2.设置一个递增计数器列,默认为1,比较上下行的字符,如果在字典中的顺序是递增, 则计数器加1,否则,计数器置1 3.找出计数器最大的数及对应的行号,根据这2个数截取字符串 思路有了,下面直接贴代码 DECLARE @vtext VA
-
求数组中最长递增子序列的解决方法
存储扩展算法n2编程c 写一个时间复杂度尽可能低的程序,求一个一维数组(N个元素)中的最长递增子序列的长度.例如:在序列1,-1,2,-3,4,-5,6,-7中,其最长的递增子序列为1,2,4,6 或者 -1,2,4,6.(编程之美P198-202)分析与解法根据题目的要求,求一维数组中的最长递增子序列,也就是找一个标号的序列b[0],b[1],-,b[m](0 <= b[0] < b[1] < - < b[m] < N),使得array[b[0]]<array[b[1
-
Python实现计算字符串中出现次数最多的字符示例
本文实例讲述了Python实现计算字符串中出现次数最多的字符.分享给大家供大家参考,具体如下: 1. 看了网上挺多写的方法都没达到我所需要的效果,我干脆自己写了个方法共享给大家 ee = 'aa111(((bbhhhhhh%jjjjjj%(ccc((vvvv22' cc='11222333' def max_letter_count(n): list4 = [] list1 = [] list2 = [] for i in n: list3 = [] count_max = n.count(i)
-
php获取字符串中各个字符出现次数的方法
本文实例讲述了php获取字符串中各个字符出现次数的方法.分享给大家供大家参考.具体实现方法如下: <?php //获取字符串是哪一个字符出现的字数最多 $str = "sdfhletlsflahlajgfd;lsje;r;wj;ralajfe149253573"; //方法一 $arr = str_split($str); //字符串分隔到数组中 $arr = array_count_values($arr); //用于统计数组中所有值出现的次数,返回一个数组 //键名为原数组的
-
js实现统计字符串中特定字符出现个数的方法
本文实例讲述了js实现统计字符串中特定字符出现个数的方法.分享给大家供大家参考,具体如下: //js统计字符串中包含的特定字符个数 function getPlaceholderCount(strSource) { //统计字符串中包含{}或{xxXX}的个数 var thisCount = 0; strSource.replace(/\{[xX]+\}|\{\}/g, function (m, i) { //m为找到的{xx}元素.i为索引 thisCount++; }); return th
-
Golang编程实现删除字符串中出现次数最少字符的方法
本文实例讲述了Golang编程实现删除字符串中出现次数最少字符的方法.分享给大家供大家参考,具体如下: 描述: 实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除.输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序. 输入: 字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节. 输出: 删除字符串中出现次数最少的字符后的字符串. 样例输入: abcdd 样例输出: dd 代码实现: 复制代码 代码如下: package huawei impo
-
JavaScript正则表达式替换字符串中图片地址(img src)的方法
本文实例讲述了JavaScript正则表达式替换字符串中图片地址(img src)的方法.分享给大家供大家参考,具体如下: 今天开发中遇到一个问题:如何替换一段HTML字符串中包含的所有img标签的src值? 开始想到的解决方法是: content.replace(/<img [^>]*src=['"]([^'"]+)[^>]*>/gi, function (match) { console.log(match); }); 输出结果是: 复制代码 代码如下: &
-
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
本文实例讲述了php使用substr()和strpos()联合查找字符串中某一特定字符的方法.分享给大家供大家参考.具体分析如下: 要求:在下面的字符串中查找双竖线前面的字符,大多数清空下使用explode()函数,但项目过程中使用了太多的explode(),所以找到了下面的方法. <?php $str="admin||46cc468df60c961d8da2326337c7aa58||0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,";
-
php检查字符串中是否有外链的方法
本文实例讲述了php检查字符串中是否有外链的方法.分享给大家供大家参考.具体实现方法如下: /** * is_external_link 检测字符串是否包含外链 * @param string $text 文字 * @param string $host 域名 * @return boolean false 有外链 true 无外链 * / function all_external_link($text = '', $host = '') { if (empty($host)) $host =
-
C#基于正则表达式删除字符串中数字或非数字的方法
本文实例讲述了C#基于正则表达式删除字符串中数字或非数字的方法.分享给大家供大家参考,具体如下: /// 去掉字符串中的数字 public static string RemoveNumber(string key) { return Regex.Replace(key, @"\d", ""); } //去掉字符串中的非数字 public static string RemoveNotNumber(string key) { return Regex.Replace
随机推荐
- XP系统优化和安全限制修改集合附注册表文件下载
- Java编程GUI中的事件绑定代码示例
- iOS中UITableView Cell实现自定义单选功能
- Thinkphp3.2实用篇之计算型验证码示例
- 详解Hibernate cascade级联属性的CascadeType的用法
- 微信小程序开发之录音机 音频播放 动画实例 (真机可用)
- 用js来获取上传的文件名纯粹是为了美化而用
- Python中os和shutil模块实用方法集锦
- 判断控件是否已加载完成的代码
- c++遍历lua table示例
- linux如何编译安装新内核支持NTFS文件系统(以redhat7.2x64为例)
- MongoDB中的MapReduce简介
- 再JavaScript的jQuery库中编写动画效果的指南
- 浅谈Javascript鼠标和滚轮事件
- Android点击Button实现功能的几种方法总结
- Android中获取网页表单中的数据实现思路及代码
- 在C#中根据HardwareID获取驱动程序信息的实现代码
- 使用WebUploader实现分片断点上传文件功能(二)
- 易语言制作情人节表白软件
- 易语言是在VB6上二次开发或二次封装吗