字符串全组合(淘宝宝贝关键字)
小伙伴最近开了家淘宝店,每天为宝贝的名称弄得很麻烦,经常需要根据不同的关键字来组合宝贝的名称,但不知道啥组合能引入更多的流量,所以每个都试着弄弄看,所以这就需要一个字符串的组合。
在那个夜黑风高的晚上,小伙伴带着我去华强北吃了寿司,无意间谈了这个小东西,实现难度不高,立刻动手:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 internal class Program 2 { 3 /* 4 思路:获取需要组合的字符串数组,循环读取字符串数组成立组合,再根据该组合循环再去组合,其实就是递归读取,用Contains判断是有包含即可 5 */ 6 private static void Main(String[] args) 7 { 8 //调用方法,传入字符串 9 showStr(); 10 Console.Read(); 11 } 12 13 public static void showStr() 14 { 15 string[] str1 = new string[] {"好用的", "4s", "苹果", "乔布斯"}; //原始数组 16 string[] str2 = new string[] {"好用的", "4s", "苹果", "乔布斯"}; //变化数组 17 18 //循环读取str1字符串数组 19 for (int x = 2; x <= str1.Length; x++) 20 { 21 //调用方法,传入 原始字符串数组 和 前一次的字符串数组,获得新的字符串数组 22 str2 = ChangeStr(str1, str2); 23 if (str2 == null) 24 { 25 break; 26 } 27 PrintString(str2); //输出本次的转换 28 } 29 } 30 31 32 //定义方法,接收 原始字符串数组 和 前一次的字符串数组,并返回新字符串数组 33 public static String[] ChangeStr(String[] chs, String[] oldStrs) 34 { 35 //因为新字符串数组长度暂时无法确定,也为了转换方便,所以使用StringBuilder来接收每个新字符串 36 StringBuilder sb = new StringBuilder(); 37 //定义新字符串数组 38 String[] newStrs = null; 39 40 //外循环,遍历每个字符串数组 41 for (int x = 0; x < oldStrs.Length; x++) 42 { 43 //内循环,遍历每个原始字符串,将每个字符串把每个不同字符都单独添加一次 44 for (int y = 0; y < chs.Length; y++) 45 { 46 //判断字符串是否包含该字符串 47 if (oldStrs[x].Contains(chs[y])) 48 //已包含该字符,则不操作,继续下次循环 49 continue; 50 //不包含该字符,则添加该字符 51 String s = oldStrs[x] + chs[y]; 52 //添加新字符串到StringBuilder对象并用','隔开 53 sb.Append(s).Append(','); 54 } 55 } 56 //获得新字符串数组 57 if (sb.Length != 0) 58 { 59 newStrs = sb.Remove(sb.Length - 1, 1).ToString().Split(','); 60 } 61 return newStrs; 62 } 63 64 public static void PrintString(String[] strs) 65 { 66 foreach (var str in strs) 67 { 68 Console.Write(str); 69 Console.WriteLine(); 70 } 71 } 72 }
这个也是软件的算法之一,其实这个可以衍生更多好玩的,例如记录这个关键字组合用了多少次,引入了多少流量,实现这功能用什么交互等,这也是下一步需要做的~
作者:PowerDK
出处:http://www.cnblogs.com/PowerDK/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。如有问题或建议,请多多赐教,非常感谢。