Solution 25: 最长连续数字子串

问题描述

在字符串中找出连续最长的数字串,并将该串返回。(略有修改)

解决思路

双指针法。一前一后,注意保存最长连续数字串的开始或者结束位置和最长串的长度,最后返回该子串即可。

程序

public class LongestContinuousDigits {
	public String getLCD(String s) {
		if (s == null || s.length() == 0) {
			return null;
		}

		int i = 0, j = 0;
		int maxLen = 0, len = 0, idx = 0;

		while (j < s.length()) {
			if (!(s.charAt(j) >= ‘0‘ && s.charAt(j) <= ‘9‘)) {
				i = j;
				len = 0;
			}
			else if (!(s.charAt(i) >= ‘0‘ && s.charAt(i) <= ‘9‘)) {
				// find the first character
				i = j;
				len = 1;
			}
			else {
				if (s.charAt(j) == s.charAt(i) + 1) {
					// continuous digits string
					++i;
					++len;
				} else {
					len = 0;
					i = j;
				}
			}
			if (len > maxLen) {
				maxLen = len;
				idx = j;
			}
			++j;
		}

		return s.substring(idx - maxLen + 1, idx + 1);
	}
}

  

时间: 2024-08-24 03:19:50

Solution 25: 最长连续数字子串的相关文章

寻找最长递增数字子串_Java实现

有一个字符串,其中包含了多个数字子串,要求求出最长的递增数字子串,比如s='df1112wg222235hhh25678902344a666666666666666666666666666666666666sd'中最长递增数字子串是666666666666666666666666666666666666. package com.mzsx.binarySearch; import java.util.ArrayList; import java.util.List; import java.ut

找出所有最长连续重复子串及其个数

问题描述: 找出字符串中所以最长连续重复子串及其个数 比如:输入:123234,最大连续重复字符串为23,个数为2 输入:5555,最大连续重复字符串为555,个数为2 输入:aaabbb 最大连续重复字符串为aa,个数为2:和bb,个数为2 必须存在重复的字符串才算,只出现一次的不算.可能存在多个相同长度的不同字符串,比如aaabbb. 分析:最直接的想法是利用两个指针循环遍历比较所有可能的子串,记录下所有子串长度,然后找到所有最大连续子串及其个数,时间复杂度为O(n^2).在网上看到一种利用

最长连续公共子串、最长公共子串(可以非连续)、最长回文串(连续)、最长回文串(可以不连续)、最长递增数组的求解

问题:最长连续公共子串.最长公共子串(可以非连续).最长回文串(连续).最长回文串(可以不连续).最长递增数组.长方形镶嵌最多的求解 方法:上述问题有相似性,都可以采用动态规划进行求解. (1)最长连续公共子串: 如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1; 否则,dp[i][j]=0; (2)最长公共子串(可非连续): 如果A[i]==B[j], dp[i][j]=dp[i-1][j-1]+1; 否则,dp[i][j]=dp[i-1][j-1]; (3)最长回文

【python】获取列表中最长连续数字

最近开发遇到一个功能需求,目的是要获取一个AI分析结果中最长连续帧,比如一个视频中连续3帧有人,那么我认为这个视频就是有人,我就要判断这个视频帧列表中是否有连续的三帧有人.本质就是获取列表中的最长连续数字,比如有一个列表 a = [1,2,3,4,1,2,3],要获取这个列表中最长连续数字,应该是[1,2,3,4]. 拓展,比如我想获取每隔n的最长连续数字怎么办?例如:b = [1,3,5,7,9,1,4,7,10],我想获取每隔2的最长连续数字,应该是[1,3,5,7,9],我想获取每隔3的最

两个字符串的最长连续公共子串

LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题.引入: LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题. 比如: String str1 = new String("adbccadebbca");  String str2 = new String("edabccadece");str1与str2的公共子串就是bccade. 解法就是用一个矩阵来记录两个字符串中所

后缀数组的使用心得——POJ2774 最长连续公共子串

对于这道题,将两个字符串直接合并成为一个字符串,分别记录连个字符串结束的位置. 首先,应用黑暗圣典的模板,我们可以顺利得到height,rank,sa三个数组. 之后直接扫描1-n所有的位置,选出来一个,符合"两者都在不同子串的最大长度即可". 此时我们会发现,sa数组记录了每个子串开头的位置,可以用于判断. #include<iostream> #include<stdio.h> #include<string> #include<strin

最长连续递增子串

题目链接:https://leetcode.com/problems/longest-continuous-increasing-subsequence/description/ class Solution { public: int findLengthOfLCIS(vector<int>& nums) { int n = nums.size(); if(n<=1) return n; int res = 1, len=1; for(int i=1; i<n; i++)

连续递增子串最长长度的数学期望

参考 [1]: longest consecutive subsequence of a random permutation     第一个帖子:         Theorem: The expected length of the longest increasing block in a random permutation of {1,2,…,n} is r0(n)+O(1) as n→∞, where r0(n) is the smallest positive integer su

微软算法100题25 查找连续最长的数字串

第25 题:写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr 所指内存.例如:"abcd12345ed125ss123456789"的首地址传给intputstr 后,函数将返回9,outputstr 所指的值为123456789 思路:两个指针,一个保存当前最长长度的变量max,然后移动指针,直到到字符