日期:2014-05-17  浏览次数:20423 次

微软中国经典算法题 求解(下周结帖)
面试时碰到的算法题 如下:
1:有一个随机字符串"BPMQKLNHZCY..."给定一个从A到Z之间的任意随机字符
  如"N", 然后对随机字符串进行排序 从A到Z,比"N"小的放在"N"的左边 比 "N"大的放在"N"的右边,要求在排序的过程中不改变字符的相对位置,如示例字符串的"H"和"C" 在"N"后,在排序换到"N"前面时,也应保持"C"在"H"后的相对位置。

2:字符串 "{[(10+3)*18-24/8]*(48+37)}/3", 实现一个算法,求字符串算式的结果

3:{"peolpe":[
        {"firstName":"Brett","lastName":"Mclaughlin","email":"aaa"},
        {"firstName":"Jhon","lastName":"Hunter","email":"bbb"},
        {"firstName":"Jason","lastName":"Harold","email":"ccc"},


     ]}

请实现一个算法,将上述json格式的数据填充到下面指定类的实例中
Public Class People{
Public String FirstName;
Public String LastName;
Public String Email;
}
------解决方案--------------------
mark
------解决方案--------------------
		string s = @"{""people"":[
        {""firstName"":""Brett"",""lastName"":""Mclaughlin"",""email"":""aaa""},
        {""firstName"":""Jhon"",""lastName"":""Hunter"",""email"":""bbb""},
        {""firstName"":""Jason"",""lastName"":""Harold"",""email"":""ccc""},]}";
MatchCollection matches = Regex.Matches(s, @"(?is)(?<={""people"":\[.*?){""firstName"":""(?<firstName>[^,]+)"",""lastName"":""(?<lastName>[^,]+)"",""email"":""(?<email>[^,]+)""},(?=.*?\]})");
List<People> peopleList = new List<People>();
foreach (Match match in matches)
{
People people = new People();
people.FirstName = match.Groups["firstName"].Value;
people.LastName = match.Groups["lastName"].Value;
people.Email = match.Groups["email"].Value;
peopleList.Add(people);
}
foreach (People people in peopleList)
Response.Write(string.Format("FirstName:{0}----LastName:{1}----Email:{2}<br/>", people.FirstName, people.LastName, people.Email));

------解决方案--------------------
问题1就是快速排序的第一步。
问题2考查你堆栈和逆波兰式。
问题3不知道是让你自己实现算法还是用现成的,很尴尬的题目。

感觉不是微软的,像三流作坊的面试题,lz如实招来。
------解决方案--------------------
这题目还不如那个贩卖码奴的“蚊子创新”呢。与其半年都在研究这些面试题,还不如正儿八经修炼内功,你说呢。
------解决方案--------------------
这是哪家的面试题啊?

第二题不知道你是要结果还是要过程,要结果的话
   string str = "{[(10+3)*18-24/8]*(48+37)}/3";
            str = Regex.Replace(Regex.Replace(str, @"\[
------解决方案--------------------
{", "("), @"\]
------解决方案--------------------
}", ")");
            object s = new DataTable().Compute(str, "");
          
要过程那就看一下逆波兰表达式,自己慢慢写吧。


第三题用正则或json.net都可以
------解决方案--------------------
这题很经典,也很考量功底。
------解决方案--------------------
引用: