String two pointer swapping (合集)
来源:互联网 发布:sja1000 接收数据 编辑:程序博客网 时间:2024/05/19 23:59
相似点,一般都是设置两个指针start和end在string的初始位置。
使用和ASCII相同大小的hash来记录每个字母是否出现过,或者出现的次数(或位置)。
end指针一直向前走,直到不满足条件,判断当前[start, end]区间是否符合,然后start指针向前走直到满足条件为止。
然后再前移end指针,重复以上操作。
相关问题:
1. Minimum Window Substring (http://blog.csdn.net/starmsg/article/details/27561027)
需要记录
- int needFind[256] = {0};
- int hasFound[256] = {0};
以及当前区间的字符总数
2. Longest Substring with Two Unique Charachters (http://blog.csdn.net/starmsg/article/details/40081849)
需要记录[start, end]中每个字符出现的次数,以及当前区间的unique字符数量。
#include <iostream>#include <climits>#include <cmath>#include <string>#include <cstring>using namespace std;string longest(string str){ int longest = 0;int longest_start = -1;int occurance[256];int count = 0;memset(occurance, 0, sizeof(occurance));int len = str.size();int start = 0;for(size_t i = 0; i<len; i++){occurance[str[i]]++; if(occurance[str[i]] == 1) count++; if(count == 3) { cout << i << "start" << endl; if(i-start > longest) { longest = i-start; longest_start = start; cout << i << " longest " << longest << endl; } while(count == 3) { occurance[str[start]]--; if(occurance[str[start]] == 0) count--; start++; } } } if(len - start > longest) { longest = len-start; longest_start = start; } return str.substr(longest_start, longest);}int main(){ cout << longest("aabadefghaabbaa") << endl; return 0;}
3. Longest Substring Without Repeating Characters (http://blog.csdn.net/starmsg/article/details/21412261)
需要记录每个字符最后一次出现的位置。
4 Longest Substring that has All Consecutive Characters.
to be completed
5. Minimum Window Substring with at Least N characters
int minsubstr(string &str, int n){const int nn = str.size();int map[256];memset(map, 0, sizeof(map));int unique = 0;int start = 0;int minlength = INT_MAX;int minstart = -1;for(int i=0; i<nn; i++){map[str[i]]++;if(map[str[i]] == 1){unique++;if(unique == n){while(map[str[start]] > 1 && start < i){map[str[start]]--;start++;}if(i-start+1 < minlength){minlength = i-start+1;minstart = start;}if(start < i){map[str[start]]--;if(map[str[start]] == 0)unique--;start++;}}}}if(minlength != INT_MAX){cout << minstart << "\t" << minlength << endl;cout << str.substr(minstart, minlength) << endl;}elsecout << "no valid substring found" << endl;return 0;}
0 0
- String two pointer swapping (合集)
- 【合集】【更新中】C++ pointer 之指针大乱指
- 计算机视觉代码合集two
- Two-pointer technique
- [Algorithm]九章七:Two Pointer
- 11572 - Unique Snowflakes(two pointer)
- 掉坑记录--two pointer
- 【two-pointer】Codeforces762C[Two strings]题解
- The two-dimensional pointer operation in C++
- 11536 - Smallest Sub-Array (two pointer)
- CF-395A1 Skis (two pointer)
- LeetCode Minimum Window Substring(two pointer)
- [POJ 2100] Graveyard Design (Two Pointer)
- LeetCode 16. 3Sum Closest (Two-Pointer)
- Copy List with Random Pointer(two pointers)
- [two-pointer ST表] HDU5289: Assignment
- PIMPL实现String(pointer to implementation)
- compare two string
- Android使用adb获得activity堆栈信息
- 17.PHP内核探索:解释器的执行过程
- Rabin-Miller素性测试算法
- 批处理--从1累加100的和
- ps-help.exe
- String two pointer swapping (合集)
- IOS网络编程之——socket。
- 线段树 区间合并
- apache 去除index.php
- java web中的编解码问题
- github,git 入门配置和基本使用
- Uva-1440-Inspection (只有下界的网络最小流)
- C++设计模式-Builder建造者模式
- A machine learning approach for non-blind image deconvolution(泛读)