[搜狗] 找一个字符串中包含全部出现字符的最小字符串
来源:互联网 发布:linux终端输入密码 编辑:程序博客网 时间:2024/06/05 04:38
一个字符串中含有n个字符,其中有m个不同的字符,n>>m,用最少的时间和空间找到包含所有这m个字符的最短的字串,不考虑特殊字符,只考虑字母数字即可。
例如:
abccbaddac,返回:cbad
aabcadbbbcca,返回:bcad
实现代码:
#include <iostream>using namespace std;void Search(char input[], char output[]);int main(){char* input = "abccbaddac";char* output = new char[strlen(input)];Search(input,output);cout<<output<<endl;}void Search(char input[], char output[]){bool num[10] = {0}; //数字字符bool small[26] = {0}; //小写字符bool big[26] = {0}; //大写字符int sum = 0; //不同字符的个数int temp, index;for (int i = 0; i < strlen(input); i++){temp = input[i];if (temp >= 97){index = input[i] - 'a';if (small[index] == 0){small[index] = 1;sum++;}}else if (temp <= 57){index = input[i] - '0';if (num[index] == 0){num[index] = 1;sum++;}}else{index = input[i] - 'A';if (big[index] == 0){big[index] = 1;sum++;}}}bool t_num[10] = {0}; //数字字符bool t_small[26] = {0}; //小写字符bool t_big[26] = {0}; //大写字符int t_sum = 0;int min = strlen(input);char* out = new char[strlen(output) + 1];memset(out,0,sizeof(out));for (int i = 0; i < strlen(input); i++){char* pout = out;t_sum = 0;memset(t_num,0,sizeof(t_num));memset(t_small,0,sizeof(t_small));memset(t_big,0,sizeof(t_big));int j = i;while(j < strlen(input)){*pout++ = input[j];temp = input[j];if (temp >= 97){index = input[j] - 'a';if (t_small[index] == 0){t_small[index] = 1;t_sum++;}}else if (temp <= 57){index = input[j] - '0';if (t_num[index] == 0){t_num[index] = 1;t_sum++;}}else{index = input[j] - 'A';if (t_big[index] == 0){t_big[index] = 1;t_sum++;}}if (t_sum == sum){int len = j - i;if(min > len){min = len;*pout = '\0';strcpy(output,out);j = i + len - sum;break;}}j++;}}delete [] out;}
0 0
- [搜狗] 找一个字符串中包含全部出现字符的最小字符串
- [经典面试题][搜狗]在一个字符串中寻找包含全部出现字符的最小字串
- 【c语言】一个字符串,包含n个字符。将此字符串中从第m个字符开始的全部字符复制成为另一个字符串。
- 一个字符串中查找另一个字符出现的全部索引位置(JAVA)
- 40.给字符串s1、s2,在s1中找包含s2里所有字符的最小子串
- 给字符串s1、s2,在s1中找包含s2里所有字符的最小子串
- 一个字符串中包含另一个字符串所有字符的最短子串
- 用递归找一个字符串中 最长连续出现的字符的个数
- 在一个字符串中找第一个只出现一次的字符
- 找字符串中第一个只出现一次的字符
- JS 找字符串中出现次数最多的字符
- 找一个字符串中第一个非重复的字符
- 删除字符串中出现次数最小的字符及书写字符串函数时的一个注意点
- C语言:有一个字符串,包含n个字符。写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
- 判断字符串中包含另外一个字符
- 检查一个字符串中是否包含另一个字符的函数
- 源字符串中包含目标字符串所有字符的最小子串
- 查找B字符串中出现的字符是否在A中全部出现
- POJ-3090-Visible Lattice Points 解题报告
- CentOS - 系统管理(2)
- Android的onLayout、layout方法讲解
- 大型网站架构改进历程:存储的瓶颈(四)
- 利用海伦公式求三角形面积,三边长a,b,c由键盘输入,若输入的三边长不能构成三角形,输出相应的提示信息。
- [搜狗] 找一个字符串中包含全部出现字符的最小字符串
- 从数据库读取数据训练神经网络
- 码率、帧率和I B P帧
- DOM 事件
- 不能再遍历一个list 的时候 对其增删
- Android控件GridView之仿支付宝钱包首页带有分割线的GridView九宫格的完美实现
- PLSQL显示乱码-无法进行中文条件查询解决
- Maven中央仓库——你可能不知道的细节
- UVa 10892 LCM Cardinality (分解质因数+数学)