P3809 【模板】后缀排序
题目背景
这是一道模板题。
题目描述
读入一个长度为 nn 的由大小写英文字母或数字组成的字符串,请把这个字符串的所有非空后缀按字典序从小到大排序,然后按顺序输出后缀的第一个字符在原串中的位置。位置编号为 11 到 nn。
输入格式
一行一个长度为 nn 的仅包含大小写英文字母或数字的字符串。
输出格式
一行,共 nn 个整数,表示答案。
后缀数组的快速排序实现
二元数组按照第一个元素从小到大排序,若第一个相同第二个按照从大到小排序
后缀子串排序 JAVA
题目描述:
对于一个字符串,将其后缀子串进行排序,例如grain
其子串有:
grain
rain
ain
in
n
然后对各子串按字典顺序排序,即:
ain,grain,in,n,rain
输入:
每个案例为一行字符串。
输出:
将子串排序输出
样例输入:
grain
样例输出:
ain
grain
in
n
rain
代码
package 后续数组;
import java.util.PriorityQueue;
import java.util.Scanner;
public class 后续数组快速模板 {
private static int n;
private static int Sa[];
private static int Rank[];
private static int tp[];
private static int k;
private static String str;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String str = sc.next();
PriorityQueue<String> pq = new PriorityQueue<String>();
for(int i = 0 ; i < str.length() ; i++){
pq.add(str.substring(i, str.length()));
}
int size = pq.size();
for(int i = 0; i < size;i++){ //原因在此: 只能用size不能用pq.size(),每次poll之后都会删除元素
System.out.println(pq.poll());
}
}
}
}
最长公共前缀
最长公共前缀:
思路:
先找strs[1]和strs[2]的最长公共前缀prefix,再找prefix与strs[3]的最长公共前缀,并把值赋给prefix。。。直到prefix为空或者strs字符串结束为止。
public String longestCommonPrefix(String[] strs) {
if (strs.length == 0) return "";
String prefix = strs[0];
for (int i = 1; i < strs.length; i++)
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
if (prefix.isEmpty()) return "";
}
return prefix;
}`