【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现

一、需求描述

输入一个字符串,编写程序找出这个字符串中的最长连续字符,并求出其连续出现的次数。

例如,“123444445”中的最长连续字符是4,其连续出现的次数为5;“abcddef”中的最长连续字符是d,其连续出现的次数为2;“ab”中的最长连续字符是a,其连续出现的次数为1。

二、算法设计

我们可以采取逐个比较字符串中各个字符的办法来获取最长连续字符及其连续出现的次数。程序的总体流程如图1所示。

图1 程序的总体流程

三、特殊流程考虑

在编写程序的过程中,我们要对输入的字符串的长度及格式多做考虑,如:

1.如果输入的字符串中含有空格,那么我们只处理空格之前的字符串。

2.输入的字符串中可以包含数字、字母及一些特殊的字符,但不能包含中文字符。

四、程序代码

五、程序测试

我们将编写好的程序“LongestContinChars.c”上传到Linux机器,并使用“gcc -g -oLongestContinChars LongestContinChars.c”命令对该程序进行编译,生成“LongestContinChars”文件。下面对程序进行详细的测试。

1.输入字符串为“ababbba”时,程序运行情况如下:

Please input the string:

ababbba

InputStr=ababbba

连续出现次数最多的字符是: b

连续出现的次数是: 3

2.输入字符串为“123321”时,程序运行情况如下:

Please input the string:

123321

InputStr=123321

连续出现次数最多的字符是: 3

连续出现的次数是: 2

3.输入字符串为“[email protected]##$%”时,程序运行情况如下:

Please input the string:

[email protected]##$%

[email protected]##$%

连续出现次数最多的字符是: #

连续出现的次数是: 2

4.输入字符串为“abcdef”时,程序运行情况如下:

Please input the string:

abcdef

InputStr=abcdef

连续出现次数最多的字符是: a

连续出现的次数是: 1

六、需求扩展

基于本文中的需求和程序,我们可考虑对需求进行以下扩展:

1.不区分字母的大小写,即如果输入的字符串为“AAAaaa”,那么程序输出最长连续字符为A或a,出现次数为6。

2.不限制字符串中不能出现中文字符,即如果输入的字符串为“窝窝头123”,那么程序输出最长连续字符为窝,出现次数为2。

时间: 2024-10-10 11:02:17

【字符串处理算法】最长连续字符及其出现次数的算法设计及C代码实现的相关文章

C++求字符串最长连续字符的长度的代码

下边内容是关于 C++求字符串最长连续字符的长度的内容. #include<assert.h> { assert(s!=NULL); int temp_count,final_count=0; p=s; { temp_count=0; { temp_count++; else break; } if(temp_count>final_count) { final_char=temp_char; final_count=temp_count; } } return final_count;

最长连续字符

用递归算法写一个函数,求字符串最长连续字符的长度,比如aaaabbcc的长度为4,aabb的长度为2,ab的长度为1. #include <iostream> #include <cstring> using namespace std; int MaxLengthString(char str[]) { int len=strlen(str); if(len==1) return 1; if(str=='\0') return 0; if(*(str+1)=='\0') retu

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

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

128. 最长连续序列

给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. class Solution(object): def longestConsecutive(self, num): """ :type nums: List[int] :rtype: int """ if num is

LeetCode 128. 最长连续序列(Longest Consecutive Sequence)

题目描述 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 解题思路 利用并查集的思想,构造一个map记录数组中以每个数所在的最长连续序列长度.每次遍历到一个数时,首先检查map中是否存在该数,若存在直接跳过,否则作如下更新操作: 找到左右相邻数字是否在map中,若存在则分别记录他们所在的最长连续序列长度,并更新当前的

【LeetCode】128. 最长连续序列

题目 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为O(n). 示例: 输入:[100, 4, 200, 1, 3, 2] 输出:4 解释:最长连续序列是[1, 2, 3, 4].它的长度为4 思路 思路一 先由小到大进行排序 考虑三种情况: 前后相差1,则是连续序列 前后相等,循环continue 最后一个元素,break 代码 def longestConsecutive(nums) -> int: ????if nums: ????????nums.sort()

[LeetCode] 128. 最长连续序列

题目链接 : https://leetcode-cn.com/problems/longest-consecutive-sequence/ 题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2] 输出: 4 解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 思路: 这道题, 难在时间复杂度限定在\(O(n)\), 要不排序就可以了! 思路一:集合 集合,查询时间复杂度为\(

leetcode 128. 最长连续子序列

题目描述: 给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入:[100, 4, 200, 1, 3, 2] 输出:4 即最长的连续序列为 [1,2,3,4] 思路分析: 由于要求O(n)的复杂读,因此直接排序是不可行的. 这里用到的是并查集的思想.对于每一个数,去查小于1和大于1的数是否在序列中.通过迭代求解. 尽管在 for 循环中嵌套了一个 while 循环,时间复杂度看起来像是二次方级别的.但其实它是线性的算法.因为只有当 current

LeetCode--128--最长连续序列(python)

给定一个未排序的整数数组,找出最长连续序列的长度. 要求算法的时间复杂度为 O(n). 示例: 输入: [100, 4, 200, 1, 3, 2]输出: 4解释: 最长连续序列是 [1, 2, 3, 4].它的长度为 4. 暴力超时... class Solution: def longestConsecutive(self, nums: List[int]) -> int: longestSequence = 0 for num in nums: curNum = num streak =