概述
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。思路:
通过从左向右迭代字符串,我们可以轻松地确定字符位于 Z 字形图案中的哪一行。
算法:
我们可以使用 个列表来表示 Z 字形图案中的非空行。
从左到右迭代 s,将每个字符添加到合适的行。可以使用当前行和当前方向这两个变量对合适的行进行跟踪。
只有当我们向上移动到最上面的行或向下移动到最下面的行时,当前方向才会发生改变。
public String convert(String s, int numRows) {
if (numRows == 1) return s;
ArrayList<StringBuilder> list = new ArrayList<StringBuilder>();
for (int i = 0;i < numRows;i++) {
list.add(new StringBuilder());
}
boolean up = false;
char[] chs = s.toCharArray();
int line = 0;
for (int i = 0;i < chs.length;i++) {
StringBuilder sb = list.get(line);
sb.append(chs[i]);
if (line == 0 || line == numRows - 1) up = !up;
line += up == true ? 1 : -1;
}
StringBuilder res = new StringBuilder();
for (StringBuilder sb : list) {
res.append(sb);
}
return res.toString();
}
最后
以上就是怡然往事为你收集整理的LeetCode6.Z 字形变换的全部内容,希望文章能够帮你解决LeetCode6.Z 字形变换所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复