描述:
一个旅行商人要去拜访他的客户。他手上有每个客户的地址,如:”432 Main Long Road St. Louisville OH 43071”。通常,邮编的格式由两个大写字母,一个空格和五个单数组成。他手上所有的地址都在一个字符串里并且由逗号隔开,如:
“123 Main Street St. Louisville OH 43071,432 Main Long Road St. Louisville OH 43071,786 High Street Pollocksville NY 56432”
为了便于查看,他想将这些地址通过邮编来归类。可否帮他写一个方法travel,有两个参数,第一个为r(客户地址的字符串),第二个为zipcode(邮编)。返回的字符串格式为:
zipcode:street and town,street and town,…/house number,house number,…
街道名和街道号的顺序必须一一对应。若地址中不存在所给的邮编,则返回”zipcode:/”
例如:
r = “123 Main Street St. Louisville OH 43071,432 Main Long Road St. Louisville OH 43071,786 High Street Pollocksville NY 56432”
travel(r, “OH 43071”) –> “OH 43071:Main Street St. Louisville,Main Long Road St. Louisville/123,432”
travel(r, “NY 56432”) –> “NY 56432:High Street Pollocksville/786”
travel(r, “NY 5643”) –> “NY 5643:/”
MyCode:
using System;
public class SalesmanTravel
{
public static string Travel(string r, string zipcode)
{
if (!r.Contains(zipcode)) return zipcode + ":" + "/";
string str1 = " ";
string str2 = " ";
string[] arr = r.Split(',');
for (int i = 0; i < arr.Length; i++)
{
var arr2 = arr[i].Split(' ');
string str3 = arr2[arr2.Length - 2] +" "+ arr2[arr2.Length - 1];
if (str3.Equals(zipcode) && !string.IsNullOrEmpty(zipcode))
{
str1 += arr[i].Replace(zipcode, "").Substring(arr[i].IndexOf(" ")).Trim() + ",";
str2 += arr[i].Substring(0, arr[i].IndexOf(" ")) + ",";
}
}
string retStr = string.Format("{0}:{1}/{2}", zipcode, str1.Substring(0, str1.Length - 1).Trim(), str2.Substring(0, str2.Length - 1).Trim());
return retStr;
}
}
CodeWar:
using System.Linq;
public class SalesmanTravel
{
public static string Travel(string r, string zipcode)
{
string first = "", second = "";
if(zipcode.Length > 0)
{
var addresses = r.Split(',').Where(s => s.EndsWith(zipcode)).Select(s => s.Remove(s.Length - zipcode.Length - 1));
first = string.Join(",", addresses.Select(s => s.Substring(s.IndexOf(' ') + 1)));
second = string.Join(",", addresses.Select(s => s.Substring(0, s.IndexOf(' '))));
}
return string.Format("{0}:{1}/{2}", zipcode, first, second);
}
}
MSDN: