因为每个组合的字符串,至少要有3个index。 起点,中间拼接点,结点。所以可以将字符串分解为子字符串,判断子字符串是否存在。但是,后面字符串的存在必须要在前面字符串已经存在基础上判断。

class Solution {
public: vector<string> findAllConcatenatedWordsInADict(vector<string>& words) {
//使用set容器将所有字符串存起了,因为set有count函数可以查找元素是否存在
set<string> s(words.begin(),words.end());
vector<string> res; for(int i=;i<s.size();i++)
{
string w=words[i];
int n=w.size();
//定义一个数组存标记是否当前位置之前的字符串能找到
int * dp=new int[n+]();
//string的第一个位置之前为空,因此置为1
dp[]=;
for(int j=;j<n;j++)
{
//在当前位置之前的substring都能找到的情况下,才需要考虑后面的string
if(dp[j]==) continue;
for(int k=j+;k<=n;k++)
{
//如果从当前位置到某个位置的字符串能找到,将标记置为1
//k-j<n 不能少,少了可能将字符串自己看为自己的子字符串。
// substr(i,k-j), i 为起始位置,k-j为个数,最大的个数为n,因此k从i+1 到n。
if(k-j<n&&s.count(w.substr(j,k-j))) dp[k]=;
}
if(dp[n])
{
res.push_back(w);
break;
}
}
}
return res;
} };

substr (startpos, length);  startpos是起始字符的符号,length为从 startpos开始取的字符串的长度,包括startpos。

动态数组初始化:

对于内置数据类型元素的数组,必须使用() 来显式初始化,否则程序不执行初始化操作。

int * p= new int[10];//每个元素都没有初始化,p指向的int值是不确定的

int * p=new int[10]();//每个元素初始化为0

类类型初始化,如果显式定义无参的构造函数,则调用都调用无参构造函数:

class A
{
public:
int a;
A()
{
a=;
}
};

A *m =new A();
A *n = new A;
cout<<m->a<<endl;
cout<<n->a<<endl;

都输出1

类类型,如果没有显式定义无参的构造函数,则调用默认构造函数:

class A
{
public:
int a; };
int main()
{
A *m =new A();
A *n = new A;
cout<<m->a<<endl;
cout<<n->a<<endl;
}

输出

0
8132528

因为内部数据类型int 加() 才能初始化。

 

string *psa = new string[10];  // 每个元素调用默认构造函数初始化

string *psa = new string[10]();  // 每个元素调用默认构造函数初始化

输出都为空,因为string 类有无参的构造函数。

type *p=new type 不同于
type *p=new type()
前者只具有创建对象(变量)的作用,后者还具有初始化对象(变量)为0的作用!
*顺便提一句: classXX p; 和 classXX p();不一样,
前者是调用empty constructor来创建对象,并且不具备初始化为0的作用,
而后者则是声明了一个名字为p、返回类型为classXX的函数!

 

声明只是表示一个对象的引用,比如我们的语句:

MyClasee myclass;//这个是在栈上创建一个类对象 程序退出其作用域后自动调用类的析构函数.

这里是一个空引用,而通过new关键字可以实例化一个MyClasee的实例,

所以语句:

myclass = new MyClass();//这个是在堆上创建一个类对象, 必须手动delete释放对象 否则会造成内存泄露的.

他的生存期就是他所处的语句块(也就是离他最近的一对{}),离开了他的生存期他就失效了,一般声明形式就是在栈中定义的。堆上的空间需要你用new申请,用delete或者delete[]归还,在进程的范围内,该内存的生存期就完全由你操作了;

 

当显式定义了一个构造函数之后,系统设定的default empty construct(默认构造函数)不存在了。尤其是定义了有参数的构造函数之后,必须定义一个无参的构造函数,否则A a; 或者A * a=new A;或A * a=new A() 不能通过编译。

leetCode- 472. Concatenated Words的更多相关文章

  1. 【LeetCode】472. Concatenated Words 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 动态规划 日期 题目地址:https://leetc ...

  2. 【leetcode】472. Concatenated Words

    题目如下: Given a list of words (without duplicates), please write a program that returns all concatenat ...

  3. [LeetCode] Split Concatenated Strings 分割串联字符串

    Given a list of strings, you could concatenate these strings together into a loop, where for each st ...

  4. LeetCode Split Concatenated Strings

    原题链接在这里:https://leetcode.com/problems/split-concatenated-strings/description/ 题目: Given a list of st ...

  5. 472 Concatenated Words 连接的单词

    详见:https://leetcode.com/problems/concatenated-words/description/ C++: class Solution { public: vecto ...

  6. Java实现 LeetCode 472 连接词

    472. 连接词 给定一个不含重复单词的列表,编写一个程序,返回给定单词列表中所有的连接词. 连接词的定义为:一个字符串完全是由至少两个给定数组中的单词组成的. 示例: 输入: ["cat& ...

  7. 472. Concatenated Words

    class Solution { public: vector<string> res; vector<string> findAllConcatenatedWordsInAD ...

  8. Leetcode 472.连接词

    连接词 给定一个不含重复单词的列表,编写一个程序,返回给定单词列表中所有的连接词. 连接词的定义为:一个字符串完全是由至少两个给定数组中的单词组成的. 示例: 输入: ["cat" ...

  9. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

  10. LeetCode All in One题解汇总(持续更新中...)

    突然很想刷刷题,LeetCode是一个不错的选择,忽略了输入输出,更好的突出了算法,省去了不少时间. dalao们发现了任何错误,或是代码无法通过,或是有更好的解法,或是有任何疑问和建议的话,可以在对 ...

随机推荐

  1. mybatis的缓存机制(一级缓存二级缓存和刷新缓存)和mybatis整合ehcache

    1.1  什么是查询缓存 mybatis提供查询缓存,用于减轻数据压力,提高数据库性能. mybaits提供一级缓存,和二级缓存. 一级缓存是SqlSession级别的缓存.在操作数据库时需要构造 s ...

  2. poj 2236 Wireless Network (并查集)

    链接:http://poj.org/problem?id=2236 题意: 有一个计算机网络,n台计算机全部坏了,给你两种操作: 1.O x 修复第x台计算机 2.S x,y 判断两台计算机是否联通 ...

  3. 自学Python5.1-面向对象与面向过程

    自学Python之路 自学Python5.1-面向对象与面向过程 面向过程:根据业务逻辑从上到下写代码. 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开 ...

  4. 【BZOJ1802】[AHOI2009]checker(动态规划)

    [BZOJ1802][AHOI2009]checker(动态规划) 题面 BZOJ 洛谷 题解 首先自己观察一波,发现如果有相邻两个格子都是红色的话,那么显然可以在任意位置都存在一个跳棋.可以让两个位 ...

  5. [hgoi#2019/2/24]玄学考试

    感想 对于这次考试,真的不想说什么了,太玄学了!!! t1输出比标准输出长,这是什么操作???难道要关文件???但是交到oj上又A掉了.这是什么操作. t2还好,没有出什么意外...但是要吐槽一下出题 ...

  6. 如何安装/卸载workflow manager 1.0

    安装 1. 配置文件: <Workflow> <!--http://msdn.microsoft.com/en-us/library/windowsazure/jj193269(v= ...

  7. BZOJ3235 [Ahoi2013]好方的蛇 【单调栈 + dp】

    题目链接 BZOJ3235 题解 求出每个点为顶点,分别求出左上,左下,右上,右下的矩形的个数\(g[i][j]\) 并预处理出\(f[i][j]\)表示点\((i,j)\)到四个角的矩形内合法矩形个 ...

  8. 结构体练习(C)

    结构体存储学生学号.姓名.总分,动态内存分配增加信息,然后排序 # include <stdio.h> # include <malloc.h> //# include < ...

  9. bzoj3672/luogu2305 购票 (运用点分治思想的树上cdq分治+斜率优化dp)

    我们都做过一道题(?)货币兑换,是用cdq分治来解决不单调的斜率优化 现在它放到了树上.. 总之先写下来dp方程,$f[i]=min\{f[j]+(dis[i]-dis[j])*p[i]+q[i]\} ...

  10. JavaScript -- throw、try 和 catch

    try 语句测试代码块的错误. catch 语句处理错误. throw 语句创建自定义错误. 很想java哦. <!DOCTYPE html> <html> <head& ...