字符串的排序

Posted rookiejw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串的排序相关的知识,希望对你有一定的参考价值。

剑指 offer

题目描述

输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。

思路:

看完剑指 offer 才知道,觉得主要是回溯法。递归。

两步:

  1. 求第一个位置上所有可能出现的字符,即将第一个字符和后面的字符交换
  2. 固定第一个字符,求后面字符的排序,然后把后面字符分成两部分,后面字符的第一个字符,以及这个字符后面的所有字符。

技术分享图片

import java.util.ArrayList;
import java.util.Collections; 
public class Solution {
public ArrayList<String> Permutation(String str) {
   ArrayList<String> list=new ArrayList<>();
    if(str == null||str.length()==0){
        return list;
    }
    change(list,str,0);
    //按字符串排序
    Collections.sort(list);
    return list;
}

public void change(ArrayList<String> list,String str,int index){
    if(str.length() == index){
        //因为输入的字符串中可能有重复的字母
        if(list.contains(str)){
            
        }else{
          list.add(str);   
        }
    }
    char[] data=str.toCharArray();
    for(int i=index;i<data.length;i++){
        char temp=data[index];
        data[index]=data[i];
        data[i]=temp;
        change(list,new String(data),index+1);
        //交换回来
        temp=data[index];
        data[index]=data[i];
        data[i]=temp;
    }
}

}

以上是关于字符串的排序的主要内容,如果未能解决你的问题,请参考以下文章

对数组中的字符串进行排序,使其稀疏

C# 与 F# 中的默认排序

spark 例子wordcount topk

从搜索文档中查找最小片段的算法?

以下代码片段的时间复杂度是多少?

markdown 数组排序片段