Screaming Loud

日々是精進

Suffix ArrayをPythonとJavaで比較

Javaの勉強を始めたので、JavaでSuffix Arrayの実装をやってみた。
一応今日中にやるという目標を立てていたので、達成できてよかった。

Python

# 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)

Java

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