这题我是用暴力穷举的方法解的。。竟然AC了,网络搜了搜可以用DP,菜鸟完全看不懂啊。。反正先附上自己的思路吧,这样解memory和time都很费
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
List<String> list = new ArrayList<String>();
getString(5, list);
Collections.sort(list, new StringComparator());
Scanner sc = new Scanner(System.in);
while (sc.hasNext())
{
String s = sc.nextLine().trim();
int index = Collections.binarySearch(list, s,
new StringComparator());
System.out.println(index > -1 ? index + 1 : 0);
}
}
static class StringComparator implements Comparator<String>
{
public int compare(String o1, String o2)
{
if (o1.length() != o2.length())
return o1.length() - o2.length();
else
{
int index = 0;
while (index < o1.length())
{
if (o1.charAt(index) != o2.charAt(index))
return o1.charAt(index) - o2.charAt(index);
index++;
}
return 0;
}
}
}
static List<String> getString(int n, List<String> all)
{
List<String> list = new ArrayList<String>();
if (n == 1)
for (char c = 'a'; c <= 'z'; c++)
list.add(c + "");
else
{
List<String> prev = getString(n - 1, all);
for (String s : prev)
{
char c = s.charAt(0);
for (char cc = 'a'; cc < c; cc++)
list.add(cc + "" + s);
}
}
all.addAll(list);
return list;
}
}