查找相同字母组成的单词,并将其输出

Jacberg 2015-01-09 04:54:30
给顶若干个大写字母组成的单词,以逗号“,”相隔,判断由相同字母组成的单词将其输出,有多个相同的都输出。
如输入:ABCBA,ACD,DCS,DCA,CBA,BCA,
输出:
ABCBA,CBA,BCA
ACD,DCA
...全文
853 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jacberg 2015-01-13
  • 打赏
  • 举报
回复
谢谢! using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections; namespace sameWords { class Program { public static Program ob = new Program(); static void Main(string[] args) { string source = "ABCAB,ABCD,DABCAB,ABC,CD,CABC,DCDCCD"; string nust = null; char[] septer = { ',', ' ', '.' }; string[] spli = source.Split(septer); string[] middle = new string[spli.Length]; int[] plus = new int[spli.Length]; StringBuilder number = new StringBuilder(); ArrayList re = new ArrayList(); ArrayList num = new ArrayList(); middle = ob.fun(spli); for (int p = 0; p < spli.Length; p++) { middle[p] = ob.rmRepeated(spli[p].ToString()); } Console.WriteLine("原始字符串:" + source); Console.WriteLine("去重后的单词及个单词对应ASCII码值之和:"); for (int b = 0; b < middle.Length; b++) { for (int h = 0; h < middle[b].Length; h++) { plus[b] += Convert.ToInt32(middle[b][h]); } re.Insert(b, plus[b]); Console.Write(middle[b].ToString()); Console.WriteLine("," + plus[b].ToString()); } for (int y = 0; y < re.Capacity; y++)//将arraylist对象re中相等的ASCII码值之和所对应的index添加到num中 { for (int x = y + 1; x < re.Capacity - 1; x++) { if (Object.Equals(re[y], re[x]))//判断re[index]所对应的值是否相等; { if (num.Contains(y) && num.Contains(x))//如果num中已包含判断过的值得索引,则继续查找 { continue; } else if (!num.Contains(y) && !num.Contains(x))//如果不包含y、x则将他们都添加进去 { num.Add(y); num.Add(x); } else if (num.Contains(y) && !num.Contains(x))//如果包含y、x则将他们都添加进去 { num.Add(x); } else { break; } continue; } } num.Add(","); } foreach (Object nu in num) { nust += nu.ToString(); } number.Append(nust); number.Replace(",,", ","); number.Replace(",,", ","); string[] dunm = number.ToString().Trim().Split(septer); Console.WriteLine("分组后的单词:"); for (int d = 0; d < dunm.Length; d++) { for (int y = 0; y < dunm[d].Length; y++) { if (dunm[d][y] != ',') { Console.Write(spli[Convert.ToUInt32(dunm[d][y].ToString())]); Console.Write(" "); } } if (dunm[d] != "") { Console.WriteLine(); } } Console.WriteLine("Press Any Key To Continue..."); Console.ReadKey(); } public String rmRepeated(String s)//去电字符串中重复的字母 { int len = s.Length; int k = 0; int count = 0; String str = ""; char[] c = new char[len]; c = s.ToCharArray();//将字符串转换为字符数组形式 for (int i = 0; i < len; i++) { k = i + 1; while (k < len - count) { if (c[i] == c[k]) { for (int j = k; j < len - 1; j++) { c[j] = c[j + 1];//出现重复字母,从k位置开始将数组往前挪位 } count++;//重复字母出现的次数 k--; } k++; } } for (int i = 0; i < len - count; i++) { str += c[i].ToString();//将字符数组转换成字符串 } return str; } } }
就想叫yoko 2015-01-09
  • 打赏
  • 举报
回复
每个串先去重复字母 例如ABCBA变成ABC,CBA还是CBA 然后算ascii的和ABC变成65+66+67,CBA变成67+66+65 在哈希它们 结果有两个以上的就把它们的原串输出 去重那步排下序也可以,例如CBA变成ABC 或者如果串有比较长的,你直接开个26字节的空间,把有的字母设置成1,一会扫一边就得到排序好的串了

64,664

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧