leetcode轮回计划20181028

  1. 131 Palindrome Partitioning
    题意:给定字符串,返回子字符串数组,使得所有的子字符串都是回文串。
    思路:回溯
  2. 133 Clone Graph
    题意:深层复制一张图
    思路:BFS
  3. 134 Gas Station
    题意:能不能转一圈,从哪儿开始转才行
    思路:假如剩下的油到不了下一站,就从下一站开始
  4. 136 Single Number
    题意:其他数字出现两次,找出出现了一次的数字
    思路:xor
  5. 137 Single Number II
    题意:其他数字出现了三次,找出出现了一次的数字
    思路:按位来
  6. 138 Copy List with Random Pointer
    题意:这种链表额外有一个指向随机位置的指针,深度复制这种指针
    思路:map。可能在random重新指向的过程中出现错误。
  7. 139 Word Break
    题意:能不能将string拆分成dict中的成分的累加
    思路:动态规划
    下面这种解法会超时:
class Solution {
public:
    bool wordBreak(string s, vector& wordDict) {
        //use set instand of vector
        if(find(wordDict.begin(), wordDict.end(), s) != wordDict.end()) return true;
        int size = s.size();
        for(int i = 1;i <= size; ++ i){
            string curr = s.substr(0, i);
            if(find(wordDict.begin(), wordDict.end(), curr) != wordDict.end())
                if(wordBreak(s.substr(i), wordDict)) return true;
        }
        return false;
    }
};

正确解法:

class Solution {
public:
    bool wordBreak(string s, vector& wordDict) {
        vector flag(s.size() + 1,false);
        flag[0] = true;
        for(int i = 1; i <= flag.size();++i){
            for(int j = 0;j < i;++j){
                if(flag[j] && find(wordDict.begin(),wordDict.end(),s.substr(j,i-j)) != wordDict.end()){
                    flag[i] = true;
                    break;
                }
            }
        }
        return flag[flag.size()-1];
    }
};

你可能感兴趣的:(leetcode轮回计划20181028)