LeetCode: 524. Longest Word in Dictionary through Deleting
题目意思是,给定一个字符串s,一堆字符串d,请找出d中是否存在一个字符串是s中删某些字符串得到的,并找出符合要求的字典序最小的那一个。
好的,其实用两个指针,遍历就可以了。(其实严格来说是三个,s一个,d中字符串顺序一个,子字符串内部一个。
时间复杂度是O(nm),因为输入本身就是nm了,所以这个复杂度是可以接受的。
string findLongestWord(string s, vector<string>& d)
{
int ps,pd1,pd2;
pd1=0;
string ans;
for(; pd1 < d.size(); pd1++)
{
ps=pd2=0;
for(; ps < s.size() && pd2 < d[pd1].size(); ps++)
{
if(s[ps] == d[pd1][pd2])
pd2++;
}
if(pd2 == d[pd1].size() && (d[pd1].size() > ans.size() || (d[pd1].size() == ans.size() && d[pd1] < ans)))
ans = d[pd1];
}
return ans;
}
一个教训是,指针的范围和变动要很小心……最好写下来一个个判断和循环的伪代码后再去写,不然写错了一个地方很难找出来。
还有就是string不能初始化为NULL,它实际上不是一个指针,只是一个地址,会出段错误的。