import java.util.ArrayList;
import java.util.List;
public class LongestConsecutiveDescendingNumberSubstring
{
public static void main(String[] args)
{
System.out.println(longestConsecutiveDescendingNumberSubstring("s")); // []
System.out.println(longestConsecutiveDescendingNumberSubstring("3")); // [3]
System.out.println(longestConsecutiveDescendingNumberSubstring("3s7")); // [3, 7]
System.out.println(longestConsecutiveDescendingNumberSubstring("421")); // [21]
System.out.println(longestConsecutiveDescendingNumberSubstring("5a321")); // [321]
System.out.println(longestConsecutiveDescendingNumberSubstring("4433210")); // [3210]
System.out.println(longestConsecutiveDescendingNumberSubstring("44332103210"));// [3210, 3210]
}
public static List<String> longestConsecutiveDescendingNumberSubstring(String s)
{
List<String> list = new ArrayList<String>();
if (s == null || s.length() == 0)
{
return list;
}
int count = 1, max = 1, ptr = 1;
while (ptr < s.length())
{
char pre = s.charAt(ptr - 1), cur = s.charAt(ptr);
if (Character.isDigit(pre) && Character.isDigit(cur) && pre - 1 == cur)
{
count++;
max = Math.max(count, max);
}
else
{
count = 1;
}
ptr++;
}
if (max == 1)
{
for (int i = 0; i < s.length(); i++)
{
char c = s.charAt(i);
if (Character.isDigit(c))
{
list.add(String.valueOf(c));
}
}
return list;
}
count = 1;
ptr = 1;
List<Integer> indexList = new ArrayList<Integer>();
while (ptr < s.length())
{
char pre = s.charAt(ptr - 1), cur = s.charAt(ptr);
if (Character.isDigit(pre) && Character.isDigit(cur) && pre - 1 == cur)
{
count++;
if (count == max)
{
indexList.add(ptr - max + 1);
}
}
else
{
count = 1;
}
ptr++;
}
for (int i = 0; i < indexList.size(); i++)
{
int begin = indexList.get(i);
list.add(s.substring(begin, begin + max));
}
return list;
}
}