IT公司100题-25-求字符串中的最长数字串

问题描述:

实现一个函数,求出字符串中的连续最长数字串。例如输入”12345cbf3456″,输出”12345″。

函数原型为:

void conti_num_max( const char * src, char * dest);

dest保存最长数字串,返回void。

分析:

遍历一遍字符串,记录起始位置和长度即可。

代码实现:

 1 // 25.cc
 2 #include <iostream>
 3 #include <cstring>
 4 using namespace std;
 5
 6 void conti_num_max(const char* src, char* dest) {
 7     if (!src) {
 8         *dest = ‘\0‘;
 9         return;
10     }
11
12     size_t len = 0;
13     size_t max_len = 0;
14     const char* p = src;
15     const char* p_start = NULL;
16     while (*p != ‘\0‘) {
17         if (*p >= ‘0‘ && *p <= ‘9‘)
18             len++;
19         else {
20             if (len > max_len) {
21                 max_len = len;
22                 p_start = p - len;
23             }
24             len = 0;
25         }
26         p++;
27     }
28     strncpy(dest, p_start, max_len);
29 }
30
31 int main() {
32     string s;
33     cout << "input a str contain num:" << endl;
34     getline(cin, s);
35
36     char* dest = new char[s.size() + 1];
37     conti_num_max(s.c_str(), dest);
38     cout << dest << endl;
39     return 0;
40 }

输出:

$ ./a.exe
input a str contain num:
123dfasdf123123asdfasdf33333333333333asdfsdf221asdf2323
33333333333333

IT公司100题-25-求字符串中的最长数字串

时间: 2024-10-29 19:10:38

IT公司100题-25-求字符串中的最长数字串的相关文章

微软算法100题88 将字符串中的字符&#39;*&#39;移到串的前部分

函数将字符串中的字符'*'移到串的前部分,前面的非'*'字符后移,但不能改变非'*'字符的先后顺序,函数返回串中字符'*'的数量.如原始串为:ab**cd**e*12,处理后为*****abcde12,函数并返回值为5.(要求使用尽量少的时间和辅助空间) 思路:类似于快速排序,用两个指针分别指向字符数组的左右边界,寻找左边第一个不为*的字符,寻找右边第一个*,然后交换字符,然后继续寻找和交换的过程,直到两个指针相交, 时间复杂度o(n), 空间复杂度o(1) 第一个写的程序有问题,没有考虑到保持

IT公司100题-26-左旋转字符串

问题描述: 给定字符串和左旋的字符数,写程序实现字符串的左旋操作.例如对于字符串”12345678″, 左旋转4个字符后,变成”56781234″.要求时间复杂度为O(n),空间复杂度O(1). 分析: 假设字符串表示为XY,X表示需要左旋的部分,左旋后字符串表示为YX. 根据公式: 代码实现: 1 // 26.cc 2 #include <iostream> 3 #include <string> 4 #include <cstring> 5 using namesp

IT公司100题-10-翻转句子中单词的顺序

问题描述: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变. 句子中单词以空格符隔开.为简单起见,标点符号和普通字母一样处理. 例如输入“Hello world!”,则输出“world! Hello”. 分析: 先翻转各个单词,然后整体翻转即可. 参考代码: 1 // 10.cc 2 #include <iostream> 3 #include <cstring> 4 #include <string> 5 using namespace std; 6

求字符串中的最长回文子串

题目:给定一个字符串S,求其中的最长的回文子串! 思路:采用动态规划的思想 /** * author :wxg */ #include<iostream> #include<string> using namespace std; /*** 动态规划的思想:字符串 S,以及 f(i,j)表示子字符串 S[i,j] 是否为回文,如果是,f(i,j)=true,否则为 false: ----- true ,i == j f (i, j) = ---- S[i] = S[j] ,j ==

IT公司100题-35- 求一个矩阵中最大的二维矩阵(元素和最大)

问题描述: 求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 中最大的是: 4 5 9 10 分析: 2*2子数组的最大和.遍历求和,时间复杂度为O(mn). 代码实现: 1 // 35.cc 2 #include <iostream> 3 #include <climits> 4 using namespace std; 5 6 int find_max(int (*a)[5], int m, int n) { 7 in

HDU 3518 Boring counting(后缀数组啊 求字符串中不重叠的重复出现至少两次的子串的个数)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3518 Problem Description 035 now faced a tough problem,his english teacher gives him a string,which consists with n lower case letter,he must figure out how many substrings appear at least twice,moreover

IT公司100题-11-求二叉树中节点的最大距离

问题描述: 写程序,求一棵二叉树中相距最远的两个节点之间的距离. 10/     \6      14/   \   /   \4    8 12    16 分析: 二叉树中最远的两个节点,要么是根和一个叶子节点,要么是两个叶子节点. 代码实现: 1 // 11.cc 2 #include <iostream> 3 using namespace std; 4 5 typedef struct BSTreeNode { 6 int data; 7 BSTreeNode *left; 8 BS

IT公司100题-18-圆圈中最后剩下的数字

问题描述: n个数字(下标为0, 1, …, n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(当前数字从1开始计数).当一个数字被删除后,从被删除数字的下一个数字开始计数,继续删除第m个数字.求这个圆圈中剩下的最后一个数字. 分析: 这是有名的约瑟夫环问题. 最直接的方法: 使用链表来模拟整个删除过程.因为需要n个链表节点,所以空间复杂度为O(n).每删除一个节点,都需要m次运算,所以时间复杂度为O(mn). 实现代码如下所示: 1 // 18_1.cc 2 #include

IT公司100题-13-求链表中倒数第k个结点

问题描述: 输入一个单向链表,输出该链表中倒数第k个结点.链表倒数第0个节点为NULL. struct list_node { int data; list_node* next; }; 分析: 方法1: 首先计算出链表中节点的个数n,然后倒数第k个节点,为正数n-k+1个节点. 需要遍历链表2次. 方法1代码实现: 1 // 13_1.cc 2 #include <iostream> 3 using namespace std; 4 5 struct list_node { 6 int da