avatar
B*t
1
给个字符串S,判断它是不是某个字符串T复制K次的结果。K未知,T未知。不要n^2的解
。。
avatar
f*e
2
是这样吗?
for(int i = 0; i < S.size(); i++)
if(S[i] != T[i%T.size()]) return false;
return true;

【在 B********t 的大作中提到】
: 给个字符串S,判断它是不是某个字符串T复制K次的结果。K未知,T未知。不要n^2的解
: 。。

avatar
j*y
3
先算两个长度 |S| 和 |T| ,算出 K = |S| / |T|
再把 T复制 K 次, 和 S 比较 ?
O(|S| + |T|)

【在 B********t 的大作中提到】
: 给个字符串S,判断它是不是某个字符串T复制K次的结果。K未知,T未知。不要n^2的解
: 。。

avatar
j*y
4
这个不对
比如 S = aba
T = ab

【在 f*****e 的大作中提到】
: 是这样吗?
: for(int i = 0; i < S.size(); i++)
: if(S[i] != T[i%T.size()]) return false;
: return true;

avatar
B*t
5
T是未知的。。

【在 j*****y 的大作中提到】
: 先算两个长度 |S| 和 |T| ,算出 K = |S| / |T|
: 再把 T复制 K 次, 和 S 比较 ?
: O(|S| + |T|)

avatar
f*e
7
S是T=S复制1次的结果:-)

【在 B********t 的大作中提到】
: 给个字符串S,判断它是不是某个字符串T复制K次的结果。K未知,T未知。不要n^2的解
: 。。

avatar
B*t
8
@。@ !@#¥%……&*()

【在 f*****e 的大作中提到】
: S是T=S复制1次的结果:-)
avatar
A*o
9
sort
avatar
l*8
11
设字符串S长度为N。
取K为N的质数因子,然后求解。
avatar
p*2
12
KMP吧。
avatar
j*y
13
确实用 kmp简单,和那个 storm8 的题目一样
pattern = S
source = S + S
找 pattern 在 source中的位置,如果某个 位置 i 使得 i 整除 |S|, 那么就
return
true, 否则 return false

【在 p*****2 的大作中提到】
: KMP吧。
avatar
f*e
14
你题目都没说明白,一点严谨性都没有,很奇怪这么多人re你的贴。

【在 B********t 的大作中提到】
: 好像是这么回事。
avatar
B*t
15
...........好吧....我的错. 向来语文不好 您也不要这么大火气。

【在 f*****e 的大作中提到】
: 你题目都没说明白,一点严谨性都没有,很奇怪这么多人re你的贴。
avatar
p*p
16
ababa是aba复制1次的结果还是2次的结果?
还是说复制aba得不到ababa

【在 B********t 的大作中提到】
: 给个字符串S,判断它是不是某个字符串T复制K次的结果。K未知,T未知。不要n^2的解
: 。。

avatar
P*b
17
我咋觉得两个pointer不停移就搞定了呢

【在 j*****y 的大作中提到】
: 确实用 kmp简单,和那个 storm8 的题目一样
: pattern = S
: source = S + S
: 找 pattern 在 source中的位置,如果某个 位置 i 使得 i 整除 |S|, 那么就
: return
: true, 否则 return false

avatar
B*t
18
懂了。。知道2爷的意思了。。我太挫了

【在 j*****y 的大作中提到】
: 确实用 kmp简单,和那个 storm8 的题目一样
: pattern = S
: source = S + S
: 找 pattern 在 source中的位置,如果某个 位置 i 使得 i 整除 |S|, 那么就
: return
: true, 否则 return false

avatar
l*b
19
nice solution indeed !

【在 j*****y 的大作中提到】
: 确实用 kmp简单,和那个 storm8 的题目一样
: pattern = S
: source = S + S
: 找 pattern 在 source中的位置,如果某个 位置 i 使得 i 整除 |S|, 那么就
: return
: true, 否则 return false

avatar
j*y
20
kmp 可以达到线性,你这个能线性?

【在 P*******b 的大作中提到】
: 我咋觉得两个pointer不停移就搞定了呢
avatar
P*b
22
O(2N)阿

【在 j*****y 的大作中提到】
: kmp 可以达到线性,你这个能线性?
avatar
Y*Y
23
先算S长度n, 然后找出n所有大于1的质因子数
然后对任何一个质因子K,判断S是不是K个相同的字符串组成的。
复杂度应该接近linear,因为一个数的质因子数很少。

【在 B********t 的大作中提到】
: 给个字符串S,判断它是不是某个字符串T复制K次的结果。K未知,T未知。不要n^2的解
: 。。

avatar
A*o
24
不行吧,整数分解,complexity class都不定

【在 Y**Y 的大作中提到】
: 先算S长度n, 然后找出n所有大于1的质因子数
: 然后对任何一个质因子K,判断S是不是K个相同的字符串组成的。
: 复杂度应该接近linear,因为一个数的质因子数很少。

avatar
l*b
25
那是因为那个复杂度是按number of digits定义的,哈哈...

【在 A***o 的大作中提到】
: 不行吧,整数分解,complexity class都不定
avatar
l*8
26
握手

【在 Y**Y 的大作中提到】
: 先算S长度n, 然后找出n所有大于1的质因子数
: 然后对任何一个质因子K,判断S是不是K个相同的字符串组成的。
: 复杂度应该接近linear,因为一个数的质因子数很少。

avatar
c*t
27
就算知道解法,还必须知道并写对KMP,google面试果然比以前难了不少。

【在 B********t 的大作中提到】
: 给个字符串S,判断它是不是某个字符串T复制K次的结果。K未知,T未知。不要n^2的解
: 。。

avatar
B*t
30
是我同学面的题。他说听声不像。哈哈。

【在 j*****y 的大作中提到】
: 楼主面试官是老中吗?
avatar
r*n
31
用suffix array应该可以做,但是提升也不大,因为要sort,所以是O(nlogn)
avatar
r*n
32
题目不是这个意思吧

【在 j*****y 的大作中提到】
: 确实用 kmp简单,和那个 storm8 的题目一样
: pattern = S
: source = S + S
: 找 pattern 在 source中的位置,如果某个 位置 i 使得 i 整除 |S|, 那么就
: return
: true, 否则 return false

avatar
f*t
33
咦,kmp估計是正解,感覺還有個nlogn的算法好像也還將就。
掃一遍字符串統計各字符出現次數,得到一個stat[]數組
如果只有一種字符而字符串長度大於一,return true
else
求stat所有值的最大公約數(nlogn),假設為gcd
if gcd==1,return false
否則,如果存在一種重複T構造S的方法的話,gcd一定是K的因子
而無論K等於gcd的多少倍,S能分成K份就一定能分成gcd份(因為gcd
只能是K的因子)
然後檢測K=gcd,S是否符合要求,符合返回true,否則return false(O(n))
實際上上面的的nlogn複雜度遠遠達不到的~~仔細分析也許會跟kmp的正解差不多?
avatar
a*o
34
顶这个,个人觉得这个才是goog想要的

【在 f******t 的大作中提到】
: 咦,kmp估計是正解,感覺還有個nlogn的算法好像也還將就。
: 掃一遍字符串統計各字符出現次數,得到一個stat[]數組
: 如果只有一種字符而字符串長度大於一,return true
: else
: 求stat所有值的最大公約數(nlogn),假設為gcd
: if gcd==1,return false
: 否則,如果存在一種重複T構造S的方法的話,gcd一定是K的因子
: 而無論K等於gcd的多少倍,S能分成K份就一定能分成gcd份(因為gcd
: 只能是K的因子)
: 然後檢測K=gcd,S是否符合要求,符合返回true,否則return false(O(n))

avatar
b*u
35
应该k是gcd的因子吧

【在 f******t 的大作中提到】
: 咦,kmp估計是正解,感覺還有個nlogn的算法好像也還將就。
: 掃一遍字符串統計各字符出現次數,得到一個stat[]數組
: 如果只有一種字符而字符串長度大於一,return true
: else
: 求stat所有值的最大公約數(nlogn),假設為gcd
: if gcd==1,return false
: 否則,如果存在一種重複T構造S的方法的話,gcd一定是K的因子
: 而無論K等於gcd的多少倍,S能分成K份就一定能分成gcd份(因為gcd
: 只能是K的因子)
: 然後檢測K=gcd,S是否符合要求,符合返回true,否則return false(O(n))

avatar
C*n
36
同意,例如aabbaabb,gcd是4,k是2

【在 b*****u 的大作中提到】
: 应该k是gcd的因子吧
avatar
h*i
37
对,求gcd倒是O(n), 但是gcd的因子太多了, 如果K等于2^n * 3^m * 5^o,需要测试
的序列一点也不少。

【在 b*****u 的大作中提到】
: 应该k是gcd的因子吧
avatar
H*s
38
其实不用这么麻烦, 像二爷说的,kmp pi function 直接解决!

【在 j*****y 的大作中提到】
: 确实用 kmp简单,和那个 storm8 的题目一样
: pattern = S
: source = S + S
: 找 pattern 在 source中的位置,如果某个 位置 i 使得 i 整除 |S|, 那么就
: return
: true, 否则 return false

avatar
A*o
39
gcd can be done in O(logn)

【在 h***i 的大作中提到】
: 对,求gcd倒是O(n), 但是gcd的因子太多了, 如果K等于2^n * 3^m * 5^o,需要测试
: 的序列一点也不少。

avatar
h*i
40
我说的是总共n,不是nlgn,gcd已经被证明过了,最多recursion 5次。可以当常数。

【在 A***o 的大作中提到】
: gcd can be done in O(logn)
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。