Write a function that given a sequence and a number b between [-10,10] return a new sequence. Sequences are generated by this: http://en.wikipedia.org/wiki/Look-and-say_sequence a number b if equal to 0 the function will return the input sequence Valid sequences: 1 11 21 1211 111221 ... Example: input: 1211, +1 output: 111221 Example: input: 111221, -1 output: 1211
The problem itself is not a hard one. However, I couldn't figure out a way to use one loop for both b greater than 0 or less than 0. Is there one?
public class CountSay {
public String countandsay(String s, int b)
{
if (s == null)
return "";
if (b == 0)
return s;
StringBuilder prev = new StringBuilder(s);
StringBuilder curr = new StringBuilder();
for (int i = 0; i < Math.abs(b); i++)
{
if (prev.length() == 1)
return "";
int index = 0;
curr = new StringBuilder();
if (b < 0)
{
while (index < prev.length())
{
int count = Character.getNumericValue(prev.charAt(index));
index++;
char num = prev.charAt(index);
for (int j = 0; j < count; j++)
curr.append(num);
index++;
}
}
else
{
while(index < prev.length())
{
char num = prev.charAt(index);
int count = 1;
while (index < prev.length() - 1 && prev.charAt(index) == prev.charAt(index + 1))
{
count++;
index++;
}
curr.append(count);
curr.append(num);
index++;
}
}
prev = curr;
}
return curr.toString();
}
}
No comments:
Post a Comment