小米汽车
思路:滑动窗口法,具体见:C语言中的窗口滑动技术
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int lengthOfLongestSubstring(char* s) {
if (s == NULL)
return 0;
int len = strlen(s);
char* tmp = (char*)calloc(len, 1);
int right = 0; // 当前字符串长度
int left = 0; // 控制子串起始位置
int maxlength = 0; // 记录最长长度
for (int i = 0; i < len; i++)
{
char* p = strchr(tmp + left, s[i]);//这里需要注意的一点是字符必须先判断后复制
tmp[right] = s[i]; //逐个遍历,存储
right++;
if (p) // 如果该字符已存在,就跳到前面重复字符的下一个位置
{
left = p - tmp + 1; //p指针后一位
}
int curlength = right - left; // 当前子串长度
if (maxlength < curlength)// 找最长
{
maxlength = curlength;
}
}
free(tmp);
return maxlength;
}
int main()
{
char *s = "JQJQKAQ312";
int k = lengthOfLongestSubstring(s);
printf("k=%d\n", k);
return 0;
}
嵌入式开发:ARM、X86、Linux
哈希函数特性:不可逆,输出固定长度的值
unorderd_set
unordered_set 容器,可直译为“无序 set 容器”。即 unordered_set 容器和 set 容器很像,唯一的区别就在于 set 容器会自行对存储的数据进行排序,而 unordered_set 容器不会。
#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;
int main()
{
//创建一个空的unordered_set容器
unordered_set<string> uset;
//给 uset 容器添加数据
uset.insert("http://c.biancheng.net/java/");
uset.insert("http://c.biancheng.net/c/");
uset.insert("http://c.biancheng.net/python/");
//查看当前 uset 容器存储元素的个数
cout << "uset size = " << uset.size() << endl;
//遍历输出 uset 容器存储的所有元素
for (auto iter = uset.begin(); iter != uset.end(); ++iter) {
cout << *iter << endl;
}
return 0;
}