题目一 在字符串中找出连续最长的数字串
问题描述
给定一个字符串,输出字符串中最长的数字串,并把这个数字串的长度输出。
请在一个字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串。
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串"1234"的长度就小于数字串"1359055",如果没有数字,就返回空字符串 ("") 而不是NULL。
输入描述
1 | 一个字符串 |
输出描述
1 | 输出最长的数字串,输出最长数字串中数字个数 |
示例 1
输入
1 | abcd12345ed125ss123058789 |
输出
1 | 123058789,9 |
备注
- 如果存在长度相同的连续数字串,则输出最后一个连续数字串。
- 数字串只需要是数字组成的就可以,并不要求顺序,比如数字串"1234"的长度就小于数字串"1359055"。
- 如果没有数字,就返回空字符串 ("") 而不是NULL。
解决方案
可以设定两对指针,每对指针包含字符串的起始位置和结束位置的后一个位置,第一对指针保存着最长的数字串,第二对指针保存当前找到的数字串,通过指针相减可以得到字符串长度,通过比对长度大小不断更新指针的位置。实现代码如下:
1 | #include <iostream> |
题目二 字节流解析
问题描述
根据数值占用BIT数,按顺序从输入字节流中解析出对应数值,解析顺序按输入数组astElement
索引升序
1 | void Decode(unsigned int uiInputLen, unsigned char aInputByte[], |
其中
1 | unsigned int uiInputLen : 字节数组 (流) 长度 |
输入描述
1 | 字节数组长度uiInputLen为3; |
输出描述
1 | 数值[0]的值为6,二进制为 "0110",即 astElement[0].uiElementValue = 6; |
示例 1
输入
1 | 3 |
输出
1 | 6 |
解决方案
这道题目主要是对数字进行进制转换,输入为一个十六进制字符串,然后需要转换成对应的二进制字符串,我的做法是将字符串转换成十进制整数 (使用stoi
函数),然后将这个十进制整数转化成二进制字符串,将转换后的二进制字符串保持到数组aInputByte
,这里我不固定数组aInputByte
大小,根据输入的参数uiInputLen
动态设定数组大小,数据转换完毕后,调用Decode
函数进行解析。
PS: 十六进制字符串转二进制字符串应该可以直接用映射关系来转换,因为每个十六进制字符对应的二进制是固定的。
1 | #include <iostream> |
题目三 长整数相乘
问题描述
长整数相乘
输入描述
1 | 输入两个长整数,以空格隔开 |
输出描述
1 | 输出相乘后的结果 |
示例 1
输入
1 | -12341234 |
输出
1 | -533318047612114 |
解决方案
LeetCode有类似大整数相乘题目 43. Multiply Strings,和本题区别在于,LeetCode那题假设两个整数都是非负的,这题的整数可以是负数,在LeetCode 43题解题基础上加个符号判断即可解出该题。