对于那些不知道的人,GMAIL允许您根据原始电子邮件创建可能无限数量的电子邮件。如果您的电子邮件是“mygmail@gmail.com”,那么可以通过两种方式实现:
1)在gmail末尾的“+”后面添加文字,例如mygmail+somethinghere@gmail.com 所有电子邮件仍将发送至mygmail@gmail.com
2)放置“。”在您的Gmail地址内(开头和结尾除外),例如m.ygmail @ gmail.com,mygmail @ gmail.com,m.yg.mai.l @ gmail.com等。注意:my..gmail @ gmai.com和mygmail@gm.ail.com不起作用!
我正在测试需要通过有效电子邮件地址注册的应用程序(发送电子邮件激活)。方法(1)是最简单的方法,但电子邮件地址字段不允许“+”。这意味着我需要使用方法(2)创建一个gmail帐户数据库。
有人可以帮助我使用算法(最好是C / C ++代码),我可以提供一段文字并生成所有可能的变体吗?
一些快速数学表明,可能的组合数量为2 ^(n - 1),其中n是电子邮件中的字符数。
由于
答案 0 :(得分:3)
def generateComb(cur,rem):
if len(rem)>0:
generateComb(cur +rem[0], rem[1:])
generateComb(cur+'.'+rem[0], rem[1:])
else:
print cur
generateComb('m','ygmail')
答案 1 :(得分:0)
伪代码为您提供另一种解决方案。你的想法是有2 ^(n - 1)种组合,其中n是电子邮件字符串的长度,所以我们用0到2 ^(n - 1) - 1的数字编码点的位置
假设s是没有@部分的电子邮件地址(在您的示例中为mygmail)。
n = length(s)
for i = 0 to 2^(n - 1) - 1
s2 = ''
for j = 0 to n - 2 do
s2 = s2 + s[j]
if (bit j in i is set)
s2 = s2 + '.'
s2 = s2 + s[n - 1]
print s2
现在,如果你不想要所有的2 ^(n-1)组合(如果n> 15可能太大),只需限制第一个for循环,例如: 对于i = 0到999,获得前1000个组合。
在C / C ++中,2 ^(n-1)转换为1 <&lt;&lt; (n - 1)和(i中的位j设置)转换为((i&gt;&gt; j)&amp; 1)。