由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问道算法题
相关主题
leetcode上的Longest Palindromic Substring难道不收brute forleetcode Longest Palindromic Substring Part II 有问题?
python搞不定Longest Palindromic Substring啊Longest Palindromic Substring from leetcode
请问一道Leetcode的题:Longest Palindromic SubstringLeetcode上面这个Longest Palindromic Substring Part II是不是代码有问题?
Amazon Summer Intern Offer, 发面经yelp一题,攒rp
leetcode online judge Longest Palindromic Substring memory limit exceededLongest Palindromic Substring O(N) 算法
像Longest Palindromic Substring这种题,面试的时候有人同看Longest Palindromic Substring 这道题么?
Memory Limit Exceeded: Longest Palindromic SubstringLongest Palindromic Substring 用 vector 超时
刚刚结束的Yelp电面面经,顺求bless求问一道面试题 cisco
相关话题的讨论汇总
话题: szstr话题: rec话题: nlen话题: int话题: dp
进入JobHunting版参与讨论
1 (共1页)
S******0
发帖数: 71
1
make any given string a palindrome by adding the minimum number of character
这道题是用DP解的吗?
c*****t
发帖数: 93
2
这题看样子是kmp,O(n)的
b*****u
发帖数: 648
3
这个不就是leetcode上的longest palindrome吗, 添最少等价于删最少
d**********x
发帖数: 4083
4
肿么等价?愿闻其详

【在 b*****u 的大作中提到】
: 这个不就是leetcode上的longest palindrome吗, 添最少等价于删最少
l*******b
发帖数: 2586
5
是longest pal sub sequence吧? 比substring简单点.找到这个然后添加元素是不是就
可以啦?
貌似也可以这样想: 从一头开始看, 如果和另一头不一样, 那么两头必须有一头添加一
个, 添加以后同时删掉, 等价于减少了一个字符, 就可以用dp啦
f*****e
发帖数: 2992
6
可以找S和S逆的最大公共字符串。

【在 l*******b 的大作中提到】
: 是longest pal sub sequence吧? 比substring简单点.找到这个然后添加元素是不是就
: 可以啦?
: 貌似也可以这样想: 从一头开始看, 如果和另一头不一样, 那么两头必须有一头添加一
: 个, 添加以后同时删掉, 等价于减少了一个字符, 就可以用dp啦

d**********x
发帖数: 4083
7
我咋觉得是S和S逆的最大公共子序列呢

是就
加一

【在 f*****e 的大作中提到】
: 可以找S和S逆的最大公共字符串。
f*****e
发帖数: 2992
8
Yes, that's what I mean.

【在 d**********x 的大作中提到】
: 我咋觉得是S和S逆的最大公共子序列呢
:
: 是就
: 加一

b*****u
发帖数: 648
9
不对,我想简单了,没有考虑到回文两头都多出不同字符的反例, 比如 cabad这样
never mind

【在 d**********x 的大作中提到】
: 肿么等价?愿闻其详
c********t
发帖数: 5706
10
顶,最近对原有字符串变形问题挺多。

【在 d**********x 的大作中提到】
: 我咋觉得是S和S逆的最大公共子序列呢
:
: 是就
: 加一

相关主题
像Longest Palindromic Substring这种题,面试的时候leetcode Longest Palindromic Substring Part II 有问题?
Memory Limit Exceeded: Longest Palindromic SubstringLongest Palindromic Substring from leetcode
刚刚结束的Yelp电面面经,顺求blessLeetcode上面这个Longest Palindromic Substring Part II是不是代码有问题?
进入JobHunting版参与讨论
p****e
发帖数: 3548
11
找出对称点,越靠近中间越短

character

【在 S******0 的大作中提到】
: make any given string a palindrome by adding the minimum number of character
: 这道题是用DP解的吗?

S******0
发帖数: 71
12

然后呢?

【在 d**********x 的大作中提到】
: 我咋觉得是S和S逆的最大公共子序列呢
:
: 是就
: 加一

c********t
发帖数: 5706
13
然后brute force? 不知大牛们还有更好的解法吗?

【在 S******0 的大作中提到】
:
: 然后呢?

d**********x
发帖数: 4083
14
是啊。。求出最大公共子序列之后,这就是原字符串中的最大对称子序列
然后标记所有子序列元素位置
从两头往中间走,如果两个元素不都是子序列里面的元素,就加一个或两个元素去
match,直到两个都是为止,然后继续往中间走。。多straight forward。。。
然后假设我们可以添加更少的字符找到一个解,那么去掉这些字符以及对应的对称元素
后我们必然还是得到一个对称的字串,且比最大对称字串长,矛盾

【在 c********t 的大作中提到】
: 然后brute force? 不知大牛们还有更好的解法吗?
j*****y
发帖数: 1071
15
感觉还是dp 吧
dp[i][j] 表示把 s[i,...j]变成 palindrome的最少添加的单词数目
dp[i][j]=
dp[i + 1][j - 1], if(s[i] == s[j])
1 + min(dp[i+ 1][j], dp[i][j - 1]), if(s[i] != s[j])

【在 d**********x 的大作中提到】
: 是啊。。求出最大公共子序列之后,这就是原字符串中的最大对称子序列
: 然后标记所有子序列元素位置
: 从两头往中间走,如果两个元素不都是子序列里面的元素,就加一个或两个元素去
: match,直到两个都是为止,然后继续往中间走。。多straight forward。。。
: 然后假设我们可以添加更少的字符找到一个解,那么去掉这些字符以及对应的对称元素
: 后我们必然还是得到一个对称的字串,且比最大对称字串长,矛盾

p*****2
发帖数: 21240
16

嗯。dp想法比较直接。

【在 j*****y 的大作中提到】
: 感觉还是dp 吧
: dp[i][j] 表示把 s[i,...j]变成 palindrome的最少添加的单词数目
: dp[i][j]=
: dp[i + 1][j - 1], if(s[i] == s[j])
: 1 + min(dp[i+ 1][j], dp[i][j - 1]), if(s[i] != s[j])

d**********x
发帖数: 4083
17
一回事。。
这个dp的状态也是O(n^2)
不过说起来我一开始想的也是dp。。。

元素

【在 j*****y 的大作中提到】
: 感觉还是dp 吧
: dp[i][j] 表示把 s[i,...j]变成 palindrome的最少添加的单词数目
: dp[i][j]=
: dp[i + 1][j - 1], if(s[i] == s[j])
: 1 + min(dp[i+ 1][j], dp[i][j - 1]), if(s[i] != s[j])

r*********n
发帖数: 4553
18
....我觉得是substring呢....
原题需要添加的字符等于 S - the longest palindromic substring ending at S[end
-1]
To find the longest palindromic substring ending at S[end-1]:
reverse S, using suffix tree to find the longest common substring (ending at
S[end-1]) of S and S_r at O(n) time
overall time complexity is O(n)
edit:
我以为只能在后面加,原来是不限位置。

【在 d**********x 的大作中提到】
: 我咋觉得是S和S逆的最大公共子序列呢
:
: 是就
: 加一

p****e
发帖数: 3548
19
s[0]也行的

end
at

【在 r*********n 的大作中提到】
: ....我觉得是substring呢....
: 原题需要添加的字符等于 S - the longest palindromic substring ending at S[end
: -1]
: To find the longest palindromic substring ending at S[end-1]:
: reverse S, using suffix tree to find the longest common substring (ending at
: S[end-1]) of S and S_r at O(n) time
: overall time complexity is O(n)
: edit:
: 我以为只能在后面加,原来是不限位置。

o****d
发帖数: 2835
20

end
这个不太对?考虑cbba 不能限制在ending在两端的

【在 r*********n 的大作中提到】
: ....我觉得是substring呢....
: 原题需要添加的字符等于 S - the longest palindromic substring ending at S[end
: -1]
: To find the longest palindromic substring ending at S[end-1]:
: reverse S, using suffix tree to find the longest common substring (ending at
: S[end-1]) of S and S_r at O(n) time
: overall time complexity is O(n)
: edit:
: 我以为只能在后面加,原来是不限位置。

相关主题
yelp一题,攒rpLongest Palindromic Substring 用 vector 超时
Longest Palindromic Substring O(N) 算法求问一道面试题 cisco
有人同看Longest Palindromic Substring 这道题么?做题了,看看有没有比我更好的解法 (20个包子)
进入JobHunting版参与讨论
r*********n
发帖数: 4553
21

结果是什么
cbbabbc
the longest palindromic substring ending at S[end-1] is S[end-1] itself,
which is a
hence we should pad bbc (from cbb before a) after a
又看了下原题,我理解错题了,我以为只能在后面加

【在 o****d 的大作中提到】
:
: end
: 这个不太对?考虑cbba 不能限制在ending在两端的

c******3
发帖数: 60
22
这个是正解

【在 j*****y 的大作中提到】
: 感觉还是dp 吧
: dp[i][j] 表示把 s[i,...j]变成 palindrome的最少添加的单词数目
: dp[i][j]=
: dp[i + 1][j - 1], if(s[i] == s[j])
: 1 + min(dp[i+ 1][j], dp[i][j - 1]), if(s[i] != s[j])

f****s
发帖数: 74
23
这个adding是只能在两头adding还是可以在任意位置adding?

character

【在 S******0 的大作中提到】
: make any given string a palindrome by adding the minimum number of character
: 这道题是用DP解的吗?

o****d
发帖数: 2835
24
是不是就是跟longest palindrome subsequence 等价的

【在 j*****y 的大作中提到】
: 感觉还是dp 吧
: dp[i][j] 表示把 s[i,...j]变成 palindrome的最少添加的单词数目
: dp[i][j]=
: dp[i + 1][j - 1], if(s[i] == s[j])
: 1 + min(dp[i+ 1][j], dp[i][j - 1]), if(s[i] != s[j])

f*****e
发帖数: 2992
25
of course not.

【在 o****d 的大作中提到】
: 是不是就是跟longest palindrome subsequence 等价的
x*********w
发帖数: 533
26
const char* minimumPadding(const char* szStr, char res[])
{
if (NULL == szStr || *szStr == 0 || NULL == res)
return 0;
int nLen = strlen(szStr);
int rec[100][100] = { 0 };
for (int i = 0; i < nLen-1; i++)
{
rec[i][i+1] = szStr[i] == szStr[i+1] ? 0 : 1;
}
for (int i = 2; i < nLen; i++)
{
for (int j = 0; j < nLen-i; j++)
{
rec[j][j+i] = 1 + min(rec[j+1][j+i], rec[j][j+i-1]);
if (szStr[j] == szStr[j+i])
rec[j][j+i] = min(rec[j+1][j+i-1], rec[j][j+i]);
}
}
int nResLen = rec[0][nLen-1] + nLen;
res[nResLen] = 0;
char* p = res;
char* q = res + nResLen - 1;
int i = 0;
int j = nLen-1;
while (p <= q)
{
char c = 0;
if (szStr[i] == szStr[j])
{
c = szStr[i];
i++, j--;
}
else
{
if (rec[i][j-1] < rec[i+1][j])
{
c = szStr[j];
j--;
}
else
{
c = szStr[i];
i++;
}
}
*p++ = c;
*q-- = c;
}
return res;
}
做的还是太慢了...
p*****2
发帖数: 21240
27

怎么还不转Java?转了之后拿offer的机率要大很多

【在 x*********w 的大作中提到】
: const char* minimumPadding(const char* szStr, char res[])
: {
: if (NULL == szStr || *szStr == 0 || NULL == res)
: return 0;
: int nLen = strlen(szStr);
: int rec[100][100] = { 0 };
: for (int i = 0; i < nLen-1; i++)
: {
: rec[i][i+1] = szStr[i] == szStr[i+1] ? 0 : 1;
: }

1 (共1页)
进入JobHunting版参与讨论
相关主题
求问一道面试题 ciscoleetcode online judge Longest Palindromic Substring memory limit exceeded
做题了,看看有没有比我更好的解法 (20个包子)像Longest Palindromic Substring这种题,面试的时候
最长回文串 Memory Limit Exceeded: Longest Palindromic Substring
how to resolve this question?刚刚结束的Yelp电面面经,顺求bless
leetcode上的Longest Palindromic Substring难道不收brute forleetcode Longest Palindromic Substring Part II 有问题?
python搞不定Longest Palindromic Substring啊Longest Palindromic Substring from leetcode
请问一道Leetcode的题:Longest Palindromic SubstringLeetcode上面这个Longest Palindromic Substring Part II是不是代码有问题?
Amazon Summer Intern Offer, 发面经yelp一题,攒rp
相关话题的讨论汇总
话题: szstr话题: rec话题: nlen话题: int话题: dp