首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

昨天微软的一个笔试题,大家讨论下,该怎么处理

2012-03-03 
昨天微软的一个笔试题,大家讨论下有字符串如 ABCD,BDAC,DRF,FRD,CADB,CAADB,XB ,要将其中由相同字符组成

昨天微软的一个笔试题,大家讨论下
有字符串如 "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);


}

static List <string> Start(string oriString)
{
string[] oriList = oriString.Split( ', '); // 原始记录,分成 []
List <string> resultList = new List <string> (); // 记录结果
bool[] flags = new bool[oriList.Length]; // 用于记录比较状态
for (int i = 0; i < flags.Length; i++)
flags[i] = false;

for (int i = 0; i < oriList.Length; i++)
{
if(flags[i])
continue;

string result = " "; // 存放结果(单条)

// 比较后面的是否同当前(i) “相同”
for (int j = i + 1; j < oriList.Length; j++)
{
if (flags[j])
continue;

if (RightOP(oriList[i], oriList[j]))
{
result += ", " + oriList[j];
flags[j] = true;
}
}

if (result != " ")
{
flags[i] = true;
resultList.Add(oriList[i] + result);
}
}
return resultList;
}
// 字符比较
static bool RightOP(string str1, string str2)
{
// 字串长度判断
if (str1.Length != str2.Length)
return false;

foreach (char ch in str1.ToCharArray())
{
// 是否包含字符的判断
if (str2.IndexOf(ch) < 0)
return false;

// 判断该字符个数是否一致。过滤如ABB 和AAB这种情况
if (str1.Replace(ch.ToString(), " ").Length != str2.Replace(ch.ToString(), " ").Length)
return false;
}

// compare one by one
return true;
}
}
[解决办法]
static void Main(string[] args)
{
string source = "ABCD,BDAC,DRF,FRD,CADB,CAADB,XB ";
string[] arraySource = source.Split( ', ');
GetMaxMin(arraySource);
Console.Read();
}

//public static string[][] GetFirtTime(string[] source)
//{
// // string[][] temp = new string[source.Length,3];
//}

/// <summary>
///
/// </summary>
/// <param name= "source "> </param>
public static void GetMaxMin(string[] source)
{
//第一轮判断
//string[] needTemp = new string[source.Length];
string _strTemp;
for (int i = 0; i < source.Length; i++)
{
_strTemp = source[i];
if (source[i] == " ")
continue;
Console.Write( "\n "+ _strTemp + "\t ");
for (int n = i+1; n < source.Length; n++)
{
if (_strTemp.Length == source[n].Length)
{
if (OrderWord(_strTemp) == OrderWord(source[n]))
{
Console.Write(source[n] + "\t ");
source[n] = " ";
}


}
}
}

}

/// <summary>
/// order word
/// </summary>
/// <param name= "_source "> </param>
/// <returns> </returns>
public static string OrderWord(string _source)
{
char[] temp = _source.ToCharArray();
Array.Sort(temp);
return temp.ToString();
}

[解决办法]
也 only顶一下
[解决办法]
思路:
选择字符串和字符串列表
将单词排序作为关键字放在字符串的首部
判断一个单词是否列表中,就是将其排序后对列表的首部进行比较
中途结果如下
ABCD=ABCD,BDAC,CADB
DFR=DRF,FRD
AABCD=CAADB
BX=XB
其中没有出现“,”号说明没有重复
------------
string vText = @ "ABCD,BDAC,DRF,FRD,CADB,CAADB,XB ";
List <string> vResults = new List <string> ();
string[] vWords = vText.Split( ", ".ToCharArray(),
StringSplitOptions.RemoveEmptyEntries);
foreach (string vWord in vWords)
{
char[] vChars = vWord.ToUpper().ToCharArray();
Array.Sort(vChars);
string T = new string(vChars);
bool vExists = false;
for (int i = 0; i < vResults.Count; i++)
if (T + "= " == vResults[i].Substring(0, T.Length + 1))
{
vResults[i] += ", " + vWord;
vExists = true;
break;
}
if (!vExists) vResults.Add(T + "= " + vWord);
}
int vGroup = 0;
foreach (string vResult in vResults)
{
if (vResult.IndexOf( ', ') > 0)
{
vGroup++;
textBox1.AppendText(string.Format( "组{0}: {1}\r\n ",
vGroup, vResult.Substring(vResult.IndexOf( '= ') + 1)));
}
}
-----
组1: ABCD,BDAC,CADB
组2: DRF,FRD
[解决办法]
呵呵
会写和写好的对比了
[解决办法]
我的思路是,分组排序,然后比较字符串是否相等.
ty
[解决办法]
sort 一下
就出来了

热点排行