昨天微软的一个笔试题,大家讨论下
有字符串如 "ABCD,BDAC,DRF,FRD,CADB,CAADB,XB ",要将其中由相同字符组成的词归在一起,如果没有和其由相同字符组成的词则去掉,如上的结果为:
组1:ABCD,BDAC,CADB
组2: DRF,FRD
另外,CAADB和XB去掉
请写出代码(c#),思路和选择所使用的数据结构的原因
------解决方案--------------------等高人来解答
------解决方案--------------------等待..
------解决方案--------------------等待
------解决方案--------------------思路:
1.将字符串转换为ASICC值.
2.比较ASICC值,相通的则为解,反之则去除掉.
部分代码:
string str = "ABCD,BDAC,DRF,FRD,CADB,CAADB,XB ";
ArrayList arrayList=new ArrayList();
long lg;
string[] arry = str.Split( ', ');
foreach (string value in arry)
{
lg = 0;
foreach (char ch in value)
{
lg += (int)ch;
}
arrayList.Add(lg);
}
下略.
..........................
..........................
------解决方案--------------------455454
------解决方案--------------------这样也可以。。。。。。
------解决方案--------------------运行完上面代码,你看看arrayList里的值就知道了,刚试了中文也没影响.
------解决方案--------------------不知道对不对,说说我的思路吧
分组replit
计算该组内单个字符的ascii码值,
参考http://www.kkun.com.cn/Group/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%9F%A5%E8%AF%A2/asciifull.gif
计算该组所有单个字符的ASCII码值的和,
与其它组比较和是不是相等,再比较长度是否相等,两个条件满足刚归在一起
------解决方案--------------------回贴慢了一拍#75,
刚好正在看,C#生成汉字验证码这块呢
------解决方案--------------------厉害
------解决方案--------------------按照楼上说法,AD 和 BC 他们的ASCII值可是相等的,另外AC 和BB也是相等的,
------解决方案--------------------我的思路是,分组排序,然后比较字符串是否相等.
------解决方案--------------------ASCII值不好,a-z按1-26取值
(1)按字符串长度,长度相同分一组
(2)字符串按a-z转换为1-26值,再相加
------解决方案--------------------感觉两个字符的比较比较复杂,需要考虑几点
1) string长度,这个最简单,也效率最高
2) ASCII值的和,AD 和 BC的ASC值的和是一致的,AC和BB也是一样,但这不符合要求
3) 还要考虑AAB 和ABB的情况,他们都包含A和B, 但是却是不同的
综上,我的几个想法是
1) 把每个string都按照其字符的ASC值排序,然后比较排序后的string是否完全一致
2) 逐个字符查看是否在另外一个string中,同时还要考虑存在的数目.
自我感觉方法比较苯,呵呵.学习中.....
------解决方案--------------------个人思路
1、用split分割 "ABCD,BDAC,DRF,FRD,CADB,CAADB,XB " 得到 数组arr1;
2、在循环把arr1中每个字符串进行排序;(排序算法是影响效率得关键)
3、定义一个SortedList,循环把arr1中得字符串加进去(进去得时候判断是否已经存在)
------解决方案--------------------晕 我理解错了
------解决方案--------------------一段Code,欢迎指正.
class Program
{
static void Main(string[] args)
{
List <string> list = Start( "ABCD,BDAC,DRF,FRD,CADB,CAADB,XB,ABB,BAA "); // ABB,BAA是我测试加的
foreach (string str in list) // 输出结果
Console.WriteLine(str);