/**
* Longest Substring Without Repeating Characters
* 无重复字符的最长子串
*/
#include <string.h>
#include <iostream>
#include <string>
#include <map>
using namespace std;
int lengthOfLongestSubstring1(string s) {
map<char, int> m;
int maxLen = 0;
int lastRepeatPos = -1;
for(int i=0; i<s.size(); i++){
if (m.find(s[i])!=m.end() && lastRepeatPos < m[s[i]]) {
lastRepeatPos = m[s[i]]; //m.find()将需要匹配的数组排序或者添加到m中 逐个迭代数组
}
if ( i - lastRepeatPos > maxLen ){
maxLen = i - lastRepeatPos; //i表示字符是否出现重复,迭代lastRepeatPos部分
}
m[s[i]] = i;
}
return maxLen;
}
//don't use <map>
int lengthOfLongestSubstring(string s) {
const int MAX_CHARS = 256;
int m[MAX_CHARS];
memset(m, -1, sizeof(m));
int maxLen = 0;
int lastRepeatPos = -1;
for(int i=0; i<s.size(); i++){
if (m[s[i]]!=-1 && lastRepeatPos < m[s[i]]) {
lastRepeatPos = m[s[i]];
}
if ( i - lastRepeatPos > maxLen ){
maxLen = i - lastRepeatPos;
}
m[s[i]] = i;
}
return maxLen;
}
int main(int argc, char** argv)
{
string s = "abcabcbb";
cout << s << " : " << lengthOfLongestSubstring(s) << endl;
s = "bbbbb";
cout << s << " : " << lengthOfLongestSubstring(s) << endl;
s = "bbabcdb";
cout << s << " : " << lengthOfLongestSubstring(s) << endl;
if (argc>1){
s = argv[1];
cout << s << " : " << lengthOfLongestSubstring(s) << endl;
}
return 0;
}
新知识点:MEMSET函数,
int a[100]; memset(a, MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值.;
memset() 函数常用于内存空间初始化;
将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值
块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向S的指针。
void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
memset() 函数用来将指定内存的前n个字节设置为特定的值,其原型为:
void * memset( void * ptr, int value, size_t num );
参数说明:
- ptr 为要操作的内存的指针。
- value 为要设置的值。你既可以向 value 传递 int 类型的值,也可以传递 char 类型的值,int 和 char 可以根据 ASCII 码相互转换。
- num 为 ptr 的前 num 个字节,size_t 就是unsigned int。
【函数说明】memset() 会将 ptr 所指的内存区域的前 num 个字节的值都设置为 value,然后返回指向 ptr 的指针。
memset() 可以将一段内存空间全部设置为特定的值,所以经常用来初始化字符数组。例如:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
// 不可以声明为 char *str = "http://c.biancheng.net";
char str[] = "http://c.biancheng.net";
memset(str, '-', 7);
puts(str);
system("pause");
return EXIT_SUCCESS;
}