本文共 882 字,大约阅读时间需要 2 分钟。
题目:
给定一母串和一子串,返回子串的任意排列顺序在母串中首次出现的位置,没有则返回-1。如:母串:qwertyuihgfd,子串:tyui,则输出4
分析:
因为子串是任意组合,子串的组合方式不定,不能从子串下手,只有从母串下手了。计算子串长度,循环从第一位开始截取母串子串长度的子串,然后循环这个字串,查找子串中是否存在母串定长度串中的字符,存在就移除,直到循环结束,子串移空,就表明子串能组合成母串的部分,并记录母串截取位置。
答案:static void Main()
{ List<int> list = new List<int>(); string M = "abcbdedbcbcbbcbbbc"; string S = "bcb"; for (int i = 0; i <= M.Length - S.Length; i++)//循环母串 { string temp = M.Substring(i, S.Length);//截取母串 List<Char> chars = S.ToCharArray().ToList();//转换子串 for (int j = 0; j < temp.Length; j++) { if (chars.Contains(temp[j])) { chars.Remove(temp[j]);//把到相同的字符移出集合 } else { break;//有不包含的字符就跳出循环,重新比较下一个字符串 } if (j == temp.Length - 1)//利用j循环的次数来判断找到完整的S字符 { list.Add(i); } } } foreach (int index in list) { Console.WriteLine("string is {0} index:{1}", M.Substring(index, S.Length), index); } }
本文转自桂素伟51CTO博客,原文链接: http://blog.51cto.com/axzxs/697258,如需转载请自行联系原作者