来自访谈

时间:2015-06-05 00:54:58

标签: powershell

输入应该是一个字符串和一个整数J.该函数需要打印出输入的字符串,但如果一个字符与任何最后的J字符相同,则在其间放置一个X.

  1. DoSomething("AA",2)应输出AXXA;在打印相同的字符之前需要打印2个字符。
  2. DoSomething("ABB",2)应输出ABXXB
  3. DoSomething("ABABA",3)应输出ABXXABXXA
  4. 我首先尝试在PowerShell中执行此操作:

    DoSomething -string 'AA' -cool 3
    

    应输出AXXXA

    DoSomething -string 'AB' -cool 3
    

    应输出AB

    DoSomething -string 'ABA' -cool 3
    

    应该输出ABXXA

    DoSomething -string 'AA' -cool 1
    

    应该输出AXA

    DoSomething -string 'ABC' -cool 1
    

    应该输出ABC

    DoSomething -string 'AAA' -cool 2
    

    应输出AXXAXXA

1 个答案:

答案 0 :(得分:0)

我讨厌采访的另一个原因,虽然这是一个相对容易的问题。我不得不坐下来思考一会儿,模拟试着用记事本回答。请注意,此处的技巧是您只需要检查并比较任何时间点的最后val个字符数。

static void Main()
{
    foreach (var chr in PrintWithRepeatRule("ABABA",3))
    {
        Console.WriteLine(chr);
    }
}
IEnumerable<char> PrintWithRepeatRule(string str, int val)
{
    var charList = new List<char>();
    foreach(var chr in str)
    {

        for(int i =val-1; i>=0; i--)
        {
            if(charList.Count < 1)
                continue;           
            var cnt = charList.Count - i-1 ;
            if (cnt < 0 || charList.Count< cnt)
                continue;
            if(charList[cnt] ==chr)
            {
                for(int j =0; j<(val-i);j++)
                    charList.Add('-');

            }
        }
        charList.Add(chr);
    }
    return charList;
}