社区
C#
帖子详情
昨天微软的一个笔试题,大家讨论下
questionofms
2007-03-23 10:19:50
有字符串如"ABCD,BDAC,DRF,FRD,CADB,CAADB,XB",要将其中由相同字符组成的词归在一起,如果没有和其由相同字符组成的词则去掉,如上的结果为:
组1:ABCD,BDAC,CADB
组2: DRF,FRD
另外,CAADB和XB去掉
请写出代码(c#),思路和选择所使用的数据结构的原因
...全文
1143
48
打赏
收藏
昨天微软的一个笔试题,大家讨论下
有字符串如"ABCD,BDAC,DRF,FRD,CADB,CAADB,XB",要将其中由相同字符组成的词归在一起,如果没有和其由相同字符组成的词则去掉,如上的结果为: 组1:ABCD,BDAC,CADB 组2: DRF,FRD 另外,CAADB和XB去掉 请写出代码(c#),思路和选择所使用的数据结构的原因
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
48 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
林初茵
2008-10-07
打赏
举报
回复
mark
x63403262
2007-03-25
打赏
举报
回复
有个比较简单的方法就是将
ABCD,BDAC,DRF,FRD,CADB,CAADB,XB里的每个单次进行排序结果为
ABCD,ABCD,DFR,DFR,ABCD,AABCD,BX,然后做字符串比较
不知道大家有没更简单的方法
wzhh1988
2007-03-23
打赏
举报
回复
学习....
questionofms
2007-03-23
打赏
举报
回复
谢谢大家,结帖给分
真相重于对错
2007-03-23
打赏
举报
回复
sort 一下
就出来了
questionofms
2007-03-23
打赏
举报
回复
不过csShooter(Sharp Shooter)没把孤儿词给去掉。。。。。。
questionofms
2007-03-23
打赏
举报
回复
对,csShooter(Sharp Shooter) 的sort()后再tostring()再判断是方便多了
public static string OrderWord(string _source)
{
char[] temp = _source.ToCharArray();
Array.Sort(temp);
return temp.ToString();
}
questionofms
2007-03-23
打赏
举报
回复
哇,skywind_jk(天风)的这个算法不错
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;
}
yucong
2007-03-23
打赏
举报
回复
我的思路是,分组排序,然后比较字符串是否相等.
ty
jackyped
2007-03-23
打赏
举报
回复
呵呵
会写和写好的对比了
questionofms
2007-03-23
打赏
举报
回复
大家好厉害,挨个学习先。。。。
王集鹄
2007-03-23
打赏
举报
回复
思路:
选择字符串和字符串列表
将单词排序作为关键字放在字符串的首部
判断一个单词是否列表中,就是将其排序后对列表的首部进行比较
中途结果如下
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
Red_angelX
2007-03-23
打赏
举报
回复
也 only顶一下
csShooter
2007-03-23
打赏
举报
回复
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();
}
skywind_jk
2007-03-23
打赏
举报
回复
一段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;
}
}
questionofms
2007-03-23
打赏
举报
回复
果然我昨天的代码有问题
我想把"ABCD,BDAC,DRF,FRD,CADB,CAADB,XB"转化为ArrayList后做判断,并把判断完的删除
可是删除后报错“System.NotSupportedException ”
即:如果ArrayList为只读,或者有固定大小将会引发此异常。
之前代码是:
string input = "ABCD,BDAC,DRF,FRD,CADB,CAADB,XB";
string[] s = input.Split(',');
ArrayList al1 = ArrayList.Adapter(s);
al1.RemoveAt(0);
要如何让al1可删除呢?
jetxia
2007-03-23
打赏
举报
回复
晕 我理解错了
ylqmf
2007-03-23
打赏
举报
回复
Zine_Alone(*小飞*) ( ) 信誉:100 Blog 2007-03-23 10:41:28 得分: 0
思路:
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);
}
下略.
..........................
..........................
------------------------------------------
不同意使用 ArrayList 。应该用最基本的数组。
jetxia
2007-03-23
打赏
举报
回复
个人思路
1、用split分割 "ABCD,BDAC,DRF,FRD,CADB,CAADB,XB" 得到 数组arr1;
2、在循环把arr1中每个字符串进行排序;(排序算法是影响效率得关键)
3、定义一个SortedList,循环把arr1中得字符串加进去(进去得时候判断是否已经存在)
questionofms
2007-03-23
打赏
举报
回复
我想的是把每个词转化为char数组,然后做个Sort,再比较
加载更多回复(28)
几道
笔试题
寝室两个哥们
昨天
去市区笔试,晚上的“卧谈会”上谈了下
笔试题
目的情况。
一个
哥们去的是家小民企,不过出的题目倒是和
微软
这些跨国公司
一个
模式,说是智力题和专业题的比例约为4:1,下面几道就是晚上大家
讨论
的一些题目: 1) 你见过的世界上的最大的影子是什么? 2) 一辆汽车,当它右拐弯的时候,哪个轮胎是不转的? 3) 有
一个
人守着两个箱子,...
最新百度 阿里 华为 腾讯 谷歌面试
笔试题
及解析
分类: C C++2013-10-11 16:03 7956人阅读 评论(6) 收藏 举报 面试题
笔试题
算法数据结构c++ 8月15日,百度2道面试题: 1、来自《编程之美》的概率题:
一个
桶里面有白球、黑球各100个,现在按下述规则取球:的 i 、每次从通里面拿出来两个球; ii、如果取出的是两个同色的求,就再放入
一个
黑球; ii
2012九月十月腾讯,网易游戏,百度最新校园招聘
笔试题
十月下旬腾讯,网易游戏,百度最新校园招聘
笔试题
集锦(第271-330题) 引言 此文十月百度,阿里巴巴,迅雷搜狗最新面试十一题已经整理了最新的面试题70道,本文依次整理腾讯,网易游戏,百度等各大公司最新校园招聘的
笔试题
,后续将继续整理十月下旬的笔/面试题。 腾讯2011.10.15校园招聘会
笔试题
1、下面的排序算法中,初始数据集的排列顺序对算法的性能无
2013IT业各种
笔试题
汇总(摘录于网友博客)
9月25日,小米大连站
笔试题
: 1一共有100万,抽中的2万,每月增加4万,问20个月能抽中的概率为:? 2 for(int i=0;i 3 手机wifi(A)….wifi ap….局域网(B)…..路由器…ADSL(C)…..互联网…..服务器 断掉上述ABC哪些点TCP链接会立刻断掉? 4 12345入栈,出栈结果 21543 31245 43215 12534 可能的为?(第
一个
和
网友汇总的IT笔试面试题
9月25日,小米大连站
笔试题
: 1一共有100万,抽中的2万,每月增加4万,问20个月能抽中的概率为:? 2 for(int i=0;i 3 手机wifi(A)….wifi ap….局域网(B)…..路由器…ADSL(C)…..互联网…..服务器 断掉上述ABC哪些点TCP链接会立刻断掉? 4 12345入栈,出栈结果 21543 31245 43215 12534 可能的为?(第
一个
和
C#
111,119
社区成员
642,555
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章