通行证
- 积分
- 601
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-1-24
- 最后登录
- 1970-1-1
|
第三个
- public class Solution {
- public List<String> wordLadder(String beginWord, String endWord, Set<String> wordList,
- Set<String> tabu) {
- if (beginWord.equals(endWord)) {
- List<String> ret = new ArrayList<>();
- ret.add(endWord);
- return ret;
- }
- tabu.add(beginWord);
- char[] arr = beginWord.toCharArray();
- for (int i = 0; i < arr.length; i++) {
- char orig = arr[i];
- for (char c = 'a'; c <= 'z'; c++) {
- if (c != orig) { // prune
- arr[i] = c;
- String w = String.valueOf(arr);
- if (wordList.contains(w) && !tabu.contains(w)) { // prune with tabu
- List<String> r = wordLadder(w, endWord, wordList, tabu);
- if (r != null) {
- r.add(0, beginWord);
- return r;
- }
- }
- }
- }
- arr[i] = orig; // reset
- }
- for (int i = 0; i <= beginWord.length(); i++) { // handle adding one letter
- for (char c = 'a'; c < 'z'; c++) {
- String w = beginWord.substring(0, i) + c + beginWord.substring(i);
- if (wordList.contains(w) && !tabu.contains(w)) {
- List<String> r = wordLadder(w, endWord, wordList, tabu);
- if (r != null) {
- r.add(0, beginWord);
- return r;
- }
- }
- }
- }
- return null;
- }
- public static void main(String[] args) {
- Set<String> dict = new HashSet<>();
- dict.add("hot");
- dict.add("dot");
- dict.add("dog");
- dict.add("lot");
- dict.add("log");
- dict.add("cog");
- dict.add("hit");
- dict.add("lotg");
- dict.add("aotg");
- Solution s = new Solution();
- System.out.println(s.wordLadder("hit", "cog", dict, new HashSet<String>()));
- System.out.println(s.wordLadder("hit", "aotg", dict, new HashSet<String>()));
- return;
- }
- }
复制代码 |
|