我有一个字符串,比如说自动或者是自动的。而且我想确保如果这封信是“你'遵循这封信' a'字符颠倒了。
说
Input: automatic
Output: uatomatic
Input: auter
Output: uater
Input: auauauauauauau
Output:uuuuuuuaaaaaaa
一次通过是否可以这样做?
编辑:我有一个C实现,但我不确定如何反转字符串,以便我的整行不会被反转,只是单词。char* characterReverse(char* input) {
char temp;
int low = 0;
int length = strlen( input );
int high = length - 1;
while ( low <= high )
{
temp = input[ low ];
input[ low ] = input[ high ];
input[ high ] = temp;
low++;
high--;
}
return input;
}
答案 0 :(得分:3)
这是一个适用于您的测试用例的C#实现(请注意它只适用于小写。如果您需要不区分大小写的版本,请告诉我):
static void Main(string[] args)
{
string input1 = "automatic";
string input2 = "auter";
string input3 = "auauauauauauau";
Console.WriteLine("Input: {0}{2}Output: {1}{2}", input1, ReverseAu(input1), Environment.NewLine);
Console.WriteLine("Input: {0}{2}Output: {1}{2}", input2, ReverseAu(input2), Environment.NewLine);
Console.WriteLine("Input: {0}{2}Output: {1}{2}", input3, ReverseAu(input3), Environment.NewLine);
}
private static string ReverseAu(string input)
{
char[] chars = input.ToCharArray();
int ndx = input.IndexOf("au", StringComparison.Ordinal);
while (ndx > -1)
{
chars[ndx] = 'u';
chars[ndx + 1] = 'a';
input = new string(chars);
chars = input.ToCharArray();
ndx = input.IndexOf("au", StringComparison.Ordinal);
}
return input;
}
答案 1 :(得分:3)
我不确定一次传球和传球(这有点困难/不可能,因为你不知道在没有向前看的位置放置什么角色),但是这里&# 39;是下一个最好的东西 - O(n)
就地算法:(在Java中)
char[] characterReverse(char[] arr, char x, char y)
{
int xCount = 0, yCount = 0, lastPos = 0;
for (int i = 0; i < arr.length; i++)
{
if (arr[i] == x)
xCount++;
else if (arr[i] == y && xCount > 0)
yCount++;
else
{
for (; yCount > 0; yCount--)
arr[lastPos++] = y;
for (; xCount > 0; xCount--)
arr[lastPos++] = x;
lastPos = i+1;
}
}
for (; yCount > 0; yCount--)
arr[lastPos++] = y;
for (; xCount > 0; xCount--)
arr[lastPos++] = x;
return arr;
}
我们的基本想法是,只要我们看到x
,就会跟踪x
和y
字符的数量,直到我们得到其他内容,然后开始投放y
&#39;然后x
从我们看到第一个x
的位置返回。