author: Blankj blog : http://blankj.com time : 2017/10/16 desc :
| 13 | * </pre> |
| 14 | */ |
| 15 | public class Solution { |
| 16 | // public boolean isMatch(String s, String p) { |
| 17 | // if (p.length() == 0) return s.length() == 0; |
| 18 | // int si = 0, pi = 0, match = 0, star = -1; |
| 19 | // int sl = s.length(), pl = p.length(); |
| 20 | // char[] sc = s.toCharArray(), pc = p.toCharArray(); |
| 21 | // while (si < sl) { |
| 22 | // if (pi < pl && (pc[pi] == sc[si] || pc[pi] == '?')) { |
| 23 | // si++; |
| 24 | // pi++; |
| 25 | // } else if (pi < pl && pc[pi] == '*') { |
| 26 | // star = pi++; |
| 27 | // match = si; |
| 28 | // } else if (star != -1) { |
| 29 | // si = ++match; |
| 30 | // pi = star + 1; |
| 31 | // } else return false; |
| 32 | // } |
| 33 | // while (pi < pl && pc[pi] == '*') pi++; |
| 34 | // return pi == pl; |
| 35 | // } |
| 36 | |
| 37 | // public boolean isMatch(String s, String p) { |
| 38 | // if (p.length() == 0) return s.length() == 0; |
| 39 | // int sl = s.length(), pl = p.length(); |
| 40 | // boolean[][] dp = new boolean[sl + 1][pl + 1]; |
| 41 | // char[] sc = s.toCharArray(), pc = p.toCharArray(); |
| 42 | // dp[0][0] = true; |
| 43 | // for (int i = 1; i <= pl; ++i) { |
| 44 | // if (pc[i - 1] == '*') dp[0][i] = dp[0][i - 1]; |
| 45 | // } |
| 46 | // for (int i = 1; i <= sl; ++i) { |
| 47 | // for (int j = 1; j <= pl; ++j) { |
| 48 | // if (pc[j - 1] != '*') { |
| 49 | // dp[i][j] = dp[i - 1][j - 1] && (sc[i - 1] == pc[j - 1] || pc[j - 1] == '?'); |
| 50 | // } else { |
| 51 | // dp[i][j] = dp[i][j - 1] || dp[i - 1][j]; |
| 52 | // } |
| 53 | // } |
| 54 | // } |
| 55 | // return dp[sl][pl]; |
| 56 | // } |
| 57 | |
| 58 | public List<String> fullJustify(String[] words, int maxWidth) { |
| 59 | int len = words.length; |
| 60 | if (len == 0) return Collections.emptyList(); |
| 61 | List<String> ans = new ArrayList<>(); |
| 62 | StringBuilder spaces = new StringBuilder(); |
| 63 | for (int i = 0; i < maxWidth; ++i) { |
| 64 | spaces.append(" "); |
| 65 | } |
| 66 | int sLen = -1, left = 0; |
| 67 | for (int i = 0; i < len; ++i) { |
| 68 | if (sLen + words[i].length() + 1 <= maxWidth) { |
| 69 | sLen += words[i].length() + 1; |
| 70 | } else { |
| 71 | StringBuilder sub = new StringBuilder(words[left]); |
| 72 | int rest = maxWidth - sLen; |
nothing calls this directly
no outgoing calls
no test coverage detected