我正在尝试实现 facebook hackathon 2013 http://argote.mx/?p=353"> 上的一个更简单的问题。
摘录: 给定一个字符串 s,小约翰尼将字符串之美定义为其中字母之美的总和。每个字母的美是 1 到 26 之间的整数,包括 1 和 26,没有两个字母具有相同的美。约翰尼不在乎字母是大写还是小写,所以这并不影响字母的美观。你是一名学生,正在写一篇关于这位著名黑客青年的报告。你找到了约翰尼认为最漂亮的绳子。这个字符串的最大可能美是什么?
我已经实现了基于将单个字母映射到特定数字的自己的解决方案。
这是代码:
package samplecodes;
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.StringTokenizer;
public class StringBeauty {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<String> input= new ArrayList<String>();
try{
FileReader f1 = new FileReader(args[0]);
BufferedReader f = new BufferedReader(f1);
String newLine;
while ((newLine=f.readLine()) != null){
StringTokenizer st = new StringTokenizer(newLine);
while (st.hasMoreTokens()) {
String string= st.nextToken();
input.add(string);
}
for(String i: input)
System.out.println("input "+i);
///printLower(input);
calculateStringBeauty(input);
input.clear();
}
}
catch(Exception e){
e.printStackTrace();
}
}
public static void calculateStringBeauty(ArrayList<String> input){
/** mapping based on analysing input string**/
HashMap<Character,Integer> map= new HashMap<Character,Integer>();
map.put( Character.valueOf('a'),24);
map.put( Character.valueOf('b'),25);
map.put( Character.valueOf('c'),26);
map.put( Character.valueOf('d'),1);
map.put( Character.valueOf('e'),2);
map.put( Character.valueOf('f'),3);
map.put( Character.valueOf('g'),4);
map.put( Character.valueOf('h'),5);
map.put( Character.valueOf('i'),6);
map.put( Character.valueOf('j'),7);
map.put( Character.valueOf('k'),8);
map.put( Character.valueOf('l'),9);
map.put( Character.valueOf('m'),10);
map.put( Character.valueOf('n'),11);
map.put( Character.valueOf('o'),12);
map.put( Character.valueOf('p'),13);
map.put( Character.valueOf('q'),14);
map.put( Character.valueOf('r'),15);
map.put( Character.valueOf('s'),16);
map.put( Character.valueOf('t'),17);
map.put( Character.valueOf('u'),18);
map.put( Character.valueOf('v'),19);
map.put( Character.valueOf('w'),20);
map.put( Character.valueOf('x'),21);
map.put( Character.valueOf('y'),22);
map.put( Character.valueOf('z'),23);
int sum=0;
for(String i: input){
i=i.toLowerCase();
// System.out.println("i "+i);
char[] array= i.toCharArray();
for(char a: array){
if(map.containsKey(a))
sum+=map.get(a);
else
continue;
}
}
System.out.print(sum);
System.out.println();
}
}
我的解决方案似乎非常适合其中一个测试用例,例如 . ABbCcc
-> 152
,这映射正确但是So I just go consult Professor Dalves
-> 392
(根据我的代码)。但预计会646
根据提供的测试用例返回一个美丽值。
任何帮助调试我的代码或改进我的算法的建议将不胜感激。