[经典面试题][搜狗]在一个字符串中寻找包含全部出现字符的最小字串
2015-02-24 16:00
369 查看
题目
一个字符串中含有n个字符,其中有m个不同的字符,n>>m,用最少的时间和空间找到包含所有这m个字符的最短的字串,不考虑特殊字符,只考虑字母数字即可。
例如:
abccbaddac, 返回:cbad
aabcadbbbcca,返回:bcad
思路
[算法系列之二十二]包含T全部元素的最小子窗口
本题目相比连接中所说的稍微简单一些,本题目不用考虑重复字符。
代码
引用:
[算法系列之二十二]包含T全部元素的最小子窗口
相似题目:
[LeetCode]76.Minimum Window Substring
一个字符串中含有n个字符,其中有m个不同的字符,n>>m,用最少的时间和空间找到包含所有这m个字符的最短的字串,不考虑特殊字符,只考虑字母数字即可。
例如:
abccbaddac, 返回:cbad
aabcadbbbcca,返回:bcad
思路
[算法系列之二十二]包含T全部元素的最小子窗口
本题目相比连接中所说的稍微简单一些,本题目不用考虑重复字符。
代码
/*--------------------------------------------- * 日期:2015-02-24 * 作者:SJF0115 * 题目: 包含全部出现字符的最小字串 * 来源:搜狗 * 博客: -----------------------------------------------*/ #include <iostream> #include <climits> using namespace std; string MinWindow(string S){ int slen = S.size(); if(slen <= 0){ return ""; }//if int minWinStart,minWinEnd; int minWinLen = INT_MAX; // 统计不同字符个数 int m = 0; int needFind[256] = {0}; for(int i = 0;i < slen;++i){ needFind[S[i]] = 1; }//for for(int i = 0;i < 256;++i){ if(needFind[i] == 1){ ++m; }//if }//for int hasFound[256] = {0}; int val; int count = 0; for(int start = 0,end = 0;end < slen;++end){ val = S[end]; ++hasFound[val]; if(hasFound[val] <= 1){ ++count; }//if // 找到一子串包含全部不同的字符 if(count == m){ int startEle = S[start]; while(hasFound[startEle] > 1){ --hasFound[startEle]; ++start; startEle = S[start]; }//while int curWinLen = end - start + 1; if(minWinLen > curWinLen){ minWinLen = curWinLen; minWinStart = start; minWinEnd = end; }//if }//if }//for if(count != m){ return ""; }//if return S.substr(minWinStart,minWinEnd - minWinStart + 1); } int main() { string S("aabcadbbbcca"); cout<<MinWindow(S)<<endl; }
引用:
[算法系列之二十二]包含T全部元素的最小子窗口
相似题目:
[LeetCode]76.Minimum Window Substring
相关文章推荐
- [搜狗] 找一个字符串中包含全部出现字符的最小字符串
- AS3 面试题35 在一个字符串中找出第一个只出现一次的字符
- 寻找一个字符串中连续出现次数最多的子串(面试宝典14.5节面试题1)
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- 删除字符串中出现次数最小的字符及书写字符串函数时的一个注意点
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- C语言:有一个字符串,包含n个字符。写一个函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
- 一个字符串中查找另一个字符出现的全部索引位置(JAVA)
- 寻找一个字符串中第一个只出现两次的字符
- 26.在一个字符串(1<=字符串长度<=10000,全部由大写字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
- 一个字符串中可能包含a~z中的多个字符,如有重复,求出现次数最多的那个字母及次数,如有多个重复最多的则都输出。
- 一个字符串中可能包含a~z中的多个字符,如有重复,如String data="aavzcadfdsfsdhshgWasdfasdf",求出现次数最多的那个字母及次数,如有多个重复的则都求出。
- 在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置
- 15. Google面试题:在一个字符串中找到第一个只出现一次的字符。如输入abaccdeff,则输出b
- [C语言常见面试题]查询一个字符串中第一个只出现一次的字符,要求时间复杂度为O(1)
- php面试题:如何知道一个未知长度的字符串哪个字符出现的次数最多?(字符串可由字母,数字及其他字符组成)请写出代码。
- day07之包含min函数的栈+查找一个字符串中第一个只出现两次的字符
- JAVA中查询一个词在内容中出现的次数、判断集合中是否包含关键字、查询字符串数组单个字符的长度