Facebook ハッカソン 2013 http://argote.mx/?p=353"> here にあった簡単な質問の 1 つを実装しようとしています。
抜粋: 文字列 s が与えられたとき、小さなジョニーは文字列の美しさの合計として文字列の美しさを定義しました。各文字の美しさは 1 から 26 までの整数であり、2 つの文字が同じ美しさを持つことはありません。ジョニーは文字が大文字か小文字かを気にしないので、それは文字の美しさに影響しません。あなたは学生で、この有名なハッカーの青春についてレポートを書いています。ジョニーが最も美しいと思う弦を見つけました。この弦の最大の美しさは何ですか?
個々の文字を特定の数字にマッピングすることに基づいて、独自のソリューションを実装しました。
コードは次のとおりです。
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();
}
}
私のソリューションは、テストケースの1つで完全に機能するようです。ABbCcc
-> 152
、これは正しくマッピングされますが、 So I just go consult Professor Dalves
-> 392
(私のコードによると)。646
ただし、提供されたテスト ケースによると、
のビューティー値を返すことが期待されます。
私のコードをデバッグする際の助けや、アルゴリズムを改善するための提案をいただければ幸いです。