![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b7cd41cd68cc1c604d9e34e0b1d7d60a.png)
- 找规律:第一行跟最后一行是首相为i,公差为2*(n-1)的等差数列
- 其他行是两个等差数列的交叉
string convert(string s, int n) {
if(n == 1) return s;
string res = "";
for(int i = 0; i < n; i ++){
if(!i || i == n-1){
for(int j = i; j < s.size(); j += 2*(n-1)) res += s[j];
}else{
for(int j = i,k = 2*(n-1) - i; j < s.size() || k < s.size(); j += 2*(n-1),k += 2*(n-1)){
if(j < s.size()) res += s[j];
if(k < s.size()) res += s[k];
}
}
}
return res;
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/0a38221a60d4dd73c4c099de983f9731.png)
int lengthOfLongestSubstring(string s) {
int res = 0;
unordered_map<char,int> hash;
for(int i = 0,j = 0; i < s.size(); i ++){
hash[s[i]] ++;
while(hash[s[i]] > 1) hash[s[j++]] --;
res = max(res,i - j + 1);
}
return res;
}