我是靠谱客的博主 怡然往事,最近开发中收集的这篇文章主要介绍LeetCode6.Z 字形变换,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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 字形图案中的哪一行。

算法:

我们可以使用 text{min}( text{numrows}, text{len}(s))个列表来表示 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 字形变换所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部