Javaの勉強を始めたので、JavaでSuffix Arrayの実装をやってみた。
一応今日中にやるという目標を立てていたので、達成できてよかった。
# coding:utf-8 ''' 1,文字列を分解する関数 2,ソートする関数 3,配列に格納する関数 ''' def suffix_array(word): suffix = [] for i in range(len(word)): suffix.append((word[i:],i+1)) return sorted(suffix) if __name__=='__main__': word = 'adabracadabra' print suffix_array(word)
import java.util.*; class Suffix_array{ static ArrayList<Suffix> make_suffix(String word){ int len = word.length(); ArrayList<Suffix> suffix = new ArrayList<Suffix>(); for(int i=0; i<len;i++){ suffix.add(new Suffix(word.substring(i),i+1)); } return suffix; } public static void main(String[] args){ String word = "adabrakatabra"; ArrayList<Suffix> suffix = new ArrayList<Suffix>(); suffix = make_suffix(word); // sort Collections.sort(suffix, new SuffixComparator()); for (Suffix suf: suffix){ System.out.println(suf.getStr() + suf.getNum()); } } } class Suffix{ private int num; private String str; Suffix(String str, int num){ this.num = num; this.str = str; } public String getStr(){ return str; } public int getNum(){ return num; } } class SuffixComparator implements Comparator<Suffix>{ public int compare(Suffix arr1, Suffix arr2){ return arr1.getStr().compareTo(arr2.getStr()); } }
Javaでリスト、しかも中の要素が文字列だと、相当長くなるし、めんどくさいw