- 浏览: 138929 次
文章分类
- 全部博客 (189)
- Tree (14)
- Dynamic Programming (34)
- Array (20)
- Search (1)
- Hash (12)
- Backtracking (22)
- Divide and Conque (8)
- Greedy (6)
- Stack (12)
- software (0)
- List (7)
- Math (22)
- Two pointers (16)
- String (20)
- Linux (1)
- Sliding Window (4)
- Finite State Machine (1)
- Breadth-first Search (7)
- Graph (4)
- DFS (6)
- BFS (3)
- Sort (9)
- 基础概念 (2)
- 沟通表达 (0)
- Heap (2)
- Binary Search (15)
- 小结 (1)
- Bit Manipulation (8)
- Union Find (4)
- Topological Sort (1)
- PriorityQueue (1)
- Design Pattern (1)
- Design (1)
- Iterator (1)
- Queue (1)
最新评论
-
likesky3:
看了数据结构书得知并不是迭代和递归的区别,yb君的写法的效果是 ...
Leetcode - Graph Valid Tree -
likesky3:
迭代和递归的区别吧~
Leetcode - Graph Valid Tree -
qb_2008:
还有一种find写法:int find(int p) { i ...
Leetcode - Graph Valid Tree -
qb_2008:
要看懂这些技巧的代码确实比较困难。我是这么看懂的:1. 明白这 ...
Leetcode - Single Num II -
qb_2008:
public int singleNumber2(int[] ...
Leetcode - Single Num II
Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. Find and return the shortest palindrome you can find by performing this transformation.
For example:
Given "aacecaaa", return "aaacecaaa".
Given "abcd", return "dcbabcd".
[balabala] 以当前字符或者当前相邻两个字符为中心向两边扩展,如果左边能一直扩展到边界,则将右边剩余子串翻转后拼接在原字符串前面即构成一个回文。实现中两个要点:
1)中心字符串从原字符串的中间位置向左遍历,组成的首个回文即是最短回文。 因为回文中心越靠近中间则前面额外添加的字符数越少。
2)先判断以当前两字符为中心能否构成回文再判断以当前一个字符为中心的情况。这同样是为了得到最短回文,考虑aaaa, aab 就很容易理解。
这题自己做了两天,因为一开始没有注意到题目中的限定条件,在字符串前面添加额外字符来得到最短回文串。我忽略了这个限定还在想leetcode给的test case也会不周到啊,ba对应的最短回文可以是aba,也可以还是bab,为了被Accept,花了很长时间改代码使类似的case通过,但最终自己的版本仍然没有一个被通过,没意识到限定条件估计还得调很久,后来看别人的解答时才恍然意识到自己忽略了重要限定条件。另外,做这题还遇到个奇葩现象,我的方法三在Eclipse中运行ba 得到的是aba,但在leetcode中一直wrong answer,说是我的函数运行结果是bab,想不通。 最终被Accept的代码就29行,对比起来自己先前的代码真像懒婆娘的裹脚布,自己都懒得去看了,╮(╯▽╰)╭ , 效率上Method3 > Method1 > Method2 以后类似情况要及时参考下别人的解法。
[ref]
http://blog.csdn.net/xudli/article/details/45931667
For example:
Given "aacecaaa", return "aaacecaaa".
Given "abcd", return "dcbabcd".
[balabala] 以当前字符或者当前相邻两个字符为中心向两边扩展,如果左边能一直扩展到边界,则将右边剩余子串翻转后拼接在原字符串前面即构成一个回文。实现中两个要点:
1)中心字符串从原字符串的中间位置向左遍历,组成的首个回文即是最短回文。 因为回文中心越靠近中间则前面额外添加的字符数越少。
2)先判断以当前两字符为中心能否构成回文再判断以当前一个字符为中心的情况。这同样是为了得到最短回文,考虑aaaa, aab 就很容易理解。
这题自己做了两天,因为一开始没有注意到题目中的限定条件,在字符串前面添加额外字符来得到最短回文串。我忽略了这个限定还在想leetcode给的test case也会不周到啊,ba对应的最短回文可以是aba,也可以还是bab,为了被Accept,花了很长时间改代码使类似的case通过,但最终自己的版本仍然没有一个被通过,没意识到限定条件估计还得调很久,后来看别人的解答时才恍然意识到自己忽略了重要限定条件。另外,做这题还遇到个奇葩现象,我的方法三在Eclipse中运行ba 得到的是aba,但在leetcode中一直wrong answer,说是我的函数运行结果是bab,想不通。 最终被Accept的代码就29行,对比起来自己先前的代码真像懒婆娘的裹脚布,自己都懒得去看了,╮(╯▽╰)╭ , 效率上Method3 > Method1 > Method2 以后类似情况要及时参考下别人的解法。
[ref]
http://blog.csdn.net/xudli/article/details/45931667
public class Solution { public String shortestPalindrome(String s) { if (s == null || s.length() < 2) return s; int center = (s.length() - 1) / 2; String result = null; for (int i = center; i >= 0; i--) { if (s.charAt(i) == s.charAt(i + 1)) { if ((result = buildPalin(s, i, i + 1)) != null) return result; } if ((result = buildPalin(s, i, i)) != null) return result; } return null; } private String buildPalin(String s, int left, int right) { int n = s.length(); while (left >= 0 && right < n) { if (s.charAt(left) != s.charAt(right)) break; left--; right++; } if (left >= 0) return null; StringBuilder extra = new StringBuilder(s.substring(right)); return extra.reverse().append(s).toString(); } }
// Method 3 public String shortestPalindrome3(String s) { if (s == null || s.length() < 2) return s; int n = s.length(); int minLen = Integer.MAX_VALUE; String bestAns = ""; int right = n / 2; int left = right - 1; String ans; while (true) { // round 1: 从中心开始,左右开弓,找到的首个以当前字符为中心且边界之前左右都相等即是这种找法下最短回文串中心点 if (left >= 0) { ans = wrap(s, left, left, n, minLen); if (ans != null && ans.length() < minLen) { minLen = ans.length(); bestAns = ans; if (minLen == n) return bestAns; } if (left + 1 < n) { ans = wrap(s, left, left + 1, n, minLen); if (ans != null && ans.length() < minLen) { minLen = ans.length(); bestAns = ans; if (minLen == n) return bestAns; } } left--; } if (right < n) { ans = wrap(s, right, right, n, minLen); if (ans != null && ans.length() < minLen) { minLen = ans.length(); bestAns = ans; if (minLen == n) return bestAns; } if (right + 1 < n) { ans = wrap(s, right, right + 1, n, minLen); if (ans != null && ans.length() < minLen) { minLen = ans.length(); bestAns = ans; if (minLen == n) return bestAns; } } right++; } if (left < 0 && right >= n) break; } return bestAns; } // Method 2 public String shortestPalindrome2(String s) { if (s == null || s.length() < 2) return s; int n = s.length(); int minLen = Integer.MAX_VALUE; String bestAns = ""; for (int i = 0; i < n - 1; i++) { // round 1: 从中心开始,左右开弓,找到的首个以当前字符为中心且边界之前左右都相等即是这种找法下最短回文串中心点 String ans = wrap(s, i, i, n, minLen); if (ans != null && ans.length() < minLen) { minLen = ans.length(); bestAns = ans; } // round 2: 以相邻两个字符为中心向外辐射查找最短回文串 ans = wrap(s, i, i + 1, n, minLen); if (ans != null && ans.length() < minLen) { minLen = ans.length(); bestAns = ans; } } return bestAns; } public String wrap (String s, int left, int right, int n, int minLen) { int len = getPalin(s, left, right, n); if (len == n) { return s; } else if (len > 0 && len < minLen) { int leftLen = left != right ? (left + 1) : left; int rightLen = left != right ? (n - left - 1) : (n - right - 1); return buildPalin(s, leftLen, rightLen, n); } return null; } // Method 1 方向和leetcode test case不一致 public String shortestPalindrome1(String s) { if (s == null || s.length() < 2) return s; int n = s.length(); // round 1: 从中心开始,左右开弓,找到的首个以当前字符为中心且边界之前左右都相等即是这种找法下最短回文串中心点 int left = n / 2, right = left + 1; int minLen = -1; String ans = null; while (left >= 0 && right < n) { minLen = getPalin(s, left, left, n); if (minLen == n) return s; if (minLen > 0) { ans = buildPalin(s, left, n - left - 1, n); break; } else { minLen = getPalin(s, right, right, n); if (minLen > 0) { ans = buildPalin(s, right, n - right - 1, n); break; } } left--; right++; } if (ans == null && left >= 0) { // minLen = getPalin(s, left, left, n); ans = buildPalin(s, left, n - left - 1, n); } // round 2: 以相邻两个字符为中心向外辐射查找最短回文串 int mid = n / 2; for (int i = 0; i < n - 1; i++) { int len = getPalin(s, i, i + 1, n); if (len == n) return s; if (len > 0 && len < minLen) { int leftLen = i + 1, rightLen = n - i - 1; ans = buildPalin(s, leftLen, rightLen, n); } } return ans; } // 以left, right为中心向外辐射,某一方向能到达边界则可以以(left, right)为中心创建一个回文串 private int getPalin(String s, int left, int right, int n) { int i = left, j = right; while (i >= 0 && j < n) { if (s.charAt(i--) != s.charAt(j++)) return -1; } if (i > 0) { return left == right ? (2 * left + 1) : (2 * left + 2); } else { return left == right ? (2 * (n - right) - 1) : (2 * (n - right)); } } private String buildPalin(String s, int leftLen, int rightLen, int n) { String ans = null; if (leftLen >= rightLen) {// left part is longer StringBuilder extraLeft = new StringBuilder(s.substring(0, leftLen - rightLen)); StringBuilder tmp = new StringBuilder(s); tmp.append(extraLeft.reverse().toString()); ans = tmp.toString(); } else { StringBuilder extraRight = new StringBuilder(s.substring(n - (rightLen - leftLen), n)); StringBuilder tmp = new StringBuilder(extraRight.reverse().toString()); tmp.append(s); ans = tmp.toString(); } return ans; }
发表评论
-
Leetcode - Integer to English Words
2015-09-04 20:53 1110[分析] 这题通过率之所以非常低是因为有很多corner ca ... -
Leetcode - Read N Characters Given Read4 II - Call Multiple Times
2015-08-28 09:00 859The API: int read4(char *buf) r ... -
Leetcode - Read N Characters Given Read4
2015-08-27 20:56 697The API: int read4(char *buf) r ... -
Leetcode - One Edit Distance
2015-08-27 20:26 554[分析] 两字符串相同或者长度差异大于等于2都不符合要求,只需 ... -
Leetcode - Isomorphic Strings
2015-08-23 09:51 553[分析] 思路1:维护两个哈希表,char[] map, bo ... -
Leetcode - Group Shifted String
2015-08-22 16:20 1733Given a string, we can "sh ... -
Leetcode - Strobogrammatic Number
2015-08-22 10:48 1101A strobogrammatic number is a n ... -
Leetcode - Text Justification
2015-06-22 18:29 389Given an array of words and a l ... -
Leetcode - Valid Number
2015-06-21 10:42 665Validate if a given string is n ... -
Leetcode - Substring with Contentaion of All Words
2015-06-18 10:01 517You are given a string, s, and ... -
Leetcode - Simplify Path
2015-06-17 21:58 433Given an absolute path for a fi ... -
Leetcode - ZigZag Conversion
2015-06-15 21:31 542The string "PAYPALISHIRING ... -
Leetcode - Multiply String
2015-06-15 09:39 688Given two numbers represented a ... -
Leetcode - Minimum Window String
2015-06-14 19:33 586Given a string S and a string T ... -
Leetcode - Longest Substring Without Repeating Characters
2015-06-14 15:34 570Given a string, find the length ... -
Leetcode - Implement strStr()
2015-06-13 19:54 760Implement strStr(). Returns the ... -
Leetcode - Add Binary
2015-06-13 17:34 303Given two binary strings, retu ... -
Leetcode - Compare Version Numbers
2015-06-13 16:36 464Compare two version numbers ver ... -
Leetcode - Longest Palindrome Substring
2015-06-11 09:48 457<div class="iteye-blog- ...
相关推荐
c c语言_leetcode 0009_palindrome_number.zip
《在IDE中高效进行LeetCode练习:leetcode-editor的深度解析》 在编程学习与技能提升的过程中,LeetCode作为一款广受欢迎的在线编程挑战平台,帮助众多开发者锻炼算法思维,提高编程能力。而为了进一步提升练习体验...
在IDE中解决LeetCode问题,支持leetcode.com与leetcode-cn.com,满足基本的做题需求。 理论上支持: IntelliJ IDEA PhpStorm WebStorm PyCharm RubyMine AppCode CLion GoLand DataGrip Rider MPS Android Studio。
leetcode-cli-plugins leetcode-cli 的第 3 方插件。 什么是 如何使用 如何使用 插件 名称 描述 增强的命令 按公司或标签过滤问题 list 不要在同一台计算机上使 Chrome 的会话过期 login 不要在同一台计算机上使 ...
LeetCode Editor 7.4 版本的下载是一个名为 "leetcode-editor" 的压缩包文件。这个压缩包的导入过程非常简单,只需要将它直接拖入 IDEA 界面,IDEA 会自动识别并安装插件。这种方式使得安装过程无需额外的步骤,对于...
~/.vscode/extensions/leetcode.vscode-leetcode-0.17.0/node_modules/vsc-leetcode-cli/bin/leetcode /usr/local/bin/leetcode 修改模板 open ~/.vscode/extensions/leetcode.vscode-leetcode-0.17.0/node_modules/...
leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源leetcode-习题集资源
解题思路思路和LeetCode-python 503.下一个更大元素 II一致,只是这里求的是下标的距离,而不是数值倒序搜索,用到栈,栈里存储索引情况1:若栈为
《PyPI官网下载 | leetcode-export-1.1.tar.gz》 在编程世界里,LeetCode是一个备受程序员喜爱的在线平台,它提供了大量的算法题目,帮助开发者提升编程技能和解决问题的能力。而Python作为一门广泛使用的高级编程...
leetcode-cheat 的发布 它是什么 ? 这是一个chrome 扩展,可以帮助您更高效地使用 leetcode。您可以从 重要: leetcode-cheat 现在只支持中文版。 也就是说不完全支持leetcode.com,但是你可以用leetcode-cn.com代替...
leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码leetcode-习题集资源源代码
leetcode-cli 一个享受 leetcode 的高效 cli 工具! 非常感谢 leetcode.com,一个非常棒的网站! ⦙⦙⦙⦙⦙⦙⦙⦙ 一个很打问题的方法。 问题来缓解离线思考。 编码前的源代码。 居住和与 leetcode.com。 下载你...
`swift-Swif-LeetCode-Utils` 是一个实用工具库,它为Swift程序员提供了方便快捷的方法来处理这些问题。这个项目可以帮助你更高效地进行LeetCode上的编程练习,提升你的解决方案的可读性和简洁性。 首先,让我们...
java java_leetcode-115-distinct-subsquences
java java_leetcode-112-path-sum
java java_leetcode-101-symmetric-tree
java java_leetcode-100-same-tree
然后进入到LeetCode-Spider目录中修改config.json,其中outputDir需要填写该工程的/docs/views文件夹路径 { "username": "aaa", "password": "bbb", "outputDir": "/Users/liuyao/Downloads/LeetCode-Blog-Test/docs...
970. 强整数对数运算function powerfulIntegers(x: number, y: number, bound: number): numb