diff --git a/5.leetcode/src/com/fanxb/common/Q14.java b/5.leetcode/src/com/fanxb/common/Q14.java new file mode 100644 index 0000000..f4851f4 --- /dev/null +++ b/5.leetcode/src/com/fanxb/common/Q14.java @@ -0,0 +1,47 @@ +package com.fanxb.common; + +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Stream; + +/** + * Created with IntelliJ IDEA + * + * @author fanxb + * Date: 2020/6/10 10:49 + */ +public class Q14 { + public String longestCommonPrefix(String[] strs) { + if (strs.length == 1) return strs[0]; + StringBuilder res = new StringBuilder(); + int length = strs.length; + int minLength = Stream.of(strs).map(String::length).min(Integer::compare).orElse(0); + char a, b, c; + for (int i = 0; i < minLength; i++) { + for (int j = 1; j < length; j++) { + if (strs[j].charAt(i) != strs[j - 1].charAt(i)) return res.toString(); + } + res.append(strs[0].charAt(i)); + } + return res.toString(); + } + + public String longestCommonPrefix1(String[] strs) { + if (strs.length == 1) return strs[0]; + String res = strs[0]; + for (int i = 1; i < strs.length; i++) { + StringBuilder temp = new StringBuilder(); + for (int j = 0; j < Math.min(res.length(), strs[i].length()); j++) { + if (res.charAt(j) == strs[i].charAt(j)) temp.append(res.charAt(j)); + else break; + } + if (temp.isEmpty()) return ""; + res = temp.toString(); + } + return res; + } + + public static void main(String[] args) { + Q14 instance = new Q14(); + } +} diff --git a/5.leetcode/src/com/fanxb/common/Q151.java b/5.leetcode/src/com/fanxb/common/Q151.java new file mode 100644 index 0000000..2623c3e --- /dev/null +++ b/5.leetcode/src/com/fanxb/common/Q151.java @@ -0,0 +1,28 @@ +package com.fanxb.common; + +import java.util.Stack; + +public class Q151 { + public String reverseWords(String s) { + Stack stack = new Stack<>(); + StringBuilder temp = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + if (s.charAt(i) == ' ') { + if (!temp.isEmpty()) { + stack.push(temp.toString()); + temp = new StringBuilder(); + } + } else { + temp.append(s.charAt(i)); + } + } + if (!temp.isEmpty()) stack.push(temp.toString()); + StringBuilder res = new StringBuilder(); + res.append(stack.pop()); + while (!stack.isEmpty()) res.append(" ").append(stack.pop()); + return res.toString(); + } + + public static void main(String[] args) { + } +} diff --git a/5.leetcode/src/com/fanxb/common/Q6.java b/5.leetcode/src/com/fanxb/common/Q6.java index 7501dea..59cc923 100644 --- a/5.leetcode/src/com/fanxb/common/Q6.java +++ b/5.leetcode/src/com/fanxb/common/Q6.java @@ -1,5 +1,7 @@ package com.fanxb.common; +import java.util.Arrays; + public class Q6 { public String convert(String s, int numRows) { if (numRows == 1) { @@ -39,7 +41,40 @@ public class Q6 { return new String(strs); } + public String convert1(String s, int numRows) { + int length = s.length(); + if (length <= 1 || numRows == 1) return s; + int nSize = numRows * 2 - 2; + int lineNum = (numRows - 1) * (length / nSize + 1); + char[][] chars = new char[numRows][lineNum]; + for (int i = 0; i < numRows; i++) Arrays.fill(chars[i], ' '); + int count = 0, m = 0, n = 0; + for (int i = 0; i < length; i++) { + chars[m][n] = s.charAt(i); + count++; + if (count == nSize) { + count = 0; + m--; + n++; + } else if (count < numRows) { + m++; + } else { + m--; + n++; + } + } + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < numRows; i++) { + for (int j = 0; j < lineNum; j++) { + if (chars[i][j] != ' ') { + builder.append(chars[i][j]); + } + } + } + return builder.toString(); + } + public static void main(String[] args) { - System.out.println(new Q6().convert("PAYPALISHIRING", 4)); + System.out.println(new Q6().convert1("PAYPALISHIRING", 4)); } }