LeetCode 425. Word Squares 单词平方

原创 2017年01月03日 09:57:47

[LeetCode] Word Squares 单词平方

Given a set of words (without duplicates), find all word squares you can build from them. A sequence of words forms a valid word square if the kth row and column read the exact same string, where 0 ≤k< max(numRows, numColumns).

For example, the word sequence[“ball”,”area”,”lead”,”lady”]forms a word square because each word reads the same both horizontally and vertically.

b a l l
a r e a
l e a d
l a d y

Note:

There are at least 1 and at most 1000 words.
All words will have the exact same length.
Word length is at least 1 and at most 5.
Each word contains only lowercase English alphabeta-z.

Example 1:

Input:

[“area”,”lead”,”wall”,”lady”,”ball”]

Output:

[ [ “wall”, “area”, “lead”, “lady” ], [ “ball”, “area”, “lead”, “lady”
] ]

Explanation:

The output consists of two word squares. The order of output does not
matter (just the order of words in each word square matters).

Example 2:

Input:

[“abat”,”baba”,”atan”,”atal”]

Output:

[ [ “baba”, “abat”, “baba”, “atan” ],

[ “baba”, “abat”, “baba”, “atal” ] ]

Explanation:

The output consists of two word squares. The order of output does not
matter (just the order of words in each word square matters).

思路:
*1.自己想的方法是,DFS+pruning,对[“area”,”lead”,”wall”,”lady”,”ball”],让第一行为area,然后第二行为lead,看这两行的前两列是否构成单词平方,不是则break让第二行为wall,是则继续看第三行。这个思路的特点是,对所有可能的组合去一一判断是否是word squares。

*2.这个思路的相对的思路是,按照word squares一步一步的构造,例如:第一行先选wall, 则第二行开头必须是a才能构成word squares,所以只需要尝试以a开头的单词,发现area可以做第二行,然后第三行开头必须是le才能构成word squares,所以只需要尝试以le做前缀的词,发现lead满足条件,然后第四行必须是以lad开头的,所以找到lady,这时可以把找到的word square存起来,再尝试新的。

class Solution {
public:
    vector<vector<string>> wordSquares(vector<string>& words){
    //用hashtable存每个单词所有前缀
    //参考代码:https://discuss.leetcode.com/topic/63387/java-ac-solution-easy-to-understand
    n=words[0].size();
    for(auto&word:words){
        for(int i=0;i<n;i++){
            mm[word.substr(0,i)].push_back(word);
        }
    }
    helper(0);
    return squares;
    }
    int n;
    unordered_map<string,vector<string>> mm;
    vector<string> square(n,string<n,"">);
    vector<vector<string>> squares;

    void helper(int i){
        if(i==n){squares.push_back(square);return;}
        string prefix;
        for(int k=0;k<i;k++)
            prefix+=square[i][k];
        for(string&word:mm[prefix]){
            square[i]=word;
            helper(i+1);
        }
    }
    //当用iterative比较复杂,代码量太大,则用recursive来写。
    /*for(int i=0;i<words.size();i+=){
        square[0]=words[i];
        for(int j=0;j<n;j++){
            for(int k=0;k<j;k++){
        }
        }
    }*/
    }
    };

Python学习笔记1

摘自Python编程从入门到实践
  • Trisyp
  • Trisyp
  • 2017年04月14日 15:42
  • 171

leetcode: Word Break 纪念又一次死在动态规划上

动态规划是算法中的一个基本的算法,但是个人感觉变化很多,有时候知道能够用,但是却想不到思路。 Given a string s and a dictionary of words dict,...
  • qinzhaokun
  • qinzhaokun
  • 2015年10月08日 15:13
  • 681

Leetcode 46. Permutations

Given a collection of distinct numbers, return all possible permutations.For example, [1,2,3] have ...
  • xinqrs01
  • xinqrs01
  • 2017年01月27日 14:51
  • 63

LeetCode425——Add Strings(两个字符串中的数字相加(十进制或二进制),输出字符串形式的结果)

class Solution { public: string addStrings(string num1, string num2) { if (num1.size() <...
  • oqqHuTu12345678
  • oqqHuTu12345678
  • 2017年06月21日 18:56
  • 205

单词太长导致自动换行,出现空白区域。——word-wrap和word-break(英文单词换行)

写在前面:在写页面的时候,偶尔有时会遇到下图这两种情况,一种是单词过长时会溢出div,一种是直接换行,导致出现空白区域。这两个情景就需要word-wrap、word-break这两个属性出场来解决了。...
  • OBKoro1
  • OBKoro1
  • 2017年04月18日 20:11
  • 809

HDU-1264 Counting Squares(矩形面积并模板)

Counting Squares Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others...
  • acm_cxq
  • acm_cxq
  • 2016年03月17日 22:56
  • 347

Leetcode 解题报告

Leetcode 解题报告
  • heyunxiang
  • heyunxiang
  • 2017年10月26日 10:14
  • 244

Leetcode 89. Gray Code

The gray code is a binary numeral system where two successive values differ in only one bit.Given a ...
  • xinqrs01
  • xinqrs01
  • 2017年02月02日 07:42
  • 52

LeetCode 127 Word Ladder java (看某位大神的解法做出来的)

问题重述: Given two words (beginWord and endWord), and a dictionary’s word list, find the length of sh...
  • qq_16166139
  • qq_16166139
  • 2016年04月21日 21:50
  • 965

回归分析中的参数估计为何是最小二乘法(least squares),不是最小一乘法(least absolute deviations)

如题,面试被问到了。今天网上找了些资料,整理了一下。 回归分析就是找到一条最合适的拟合线来逼近所有的观测点。如何衡量拟合的好坏程度呢,直接地,就是看拟合值与观测值之间的距离了。在这种情况下,我们直接...
  • hustluy
  • hustluy
  • 2014年04月02日 20:37
  • 2240
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:LeetCode 425. Word Squares 单词平方
举报原因:
原因补充:

(最多只允许输入30个字)