优化一个简单的缺失词算法[重复]

Posted

技术标签:

【中文标题】优化一个简单的缺失词算法[重复]【英文标题】:Optimizing a naive missing word algorithm [duplicate] 【发布时间】:2021-10-17 05:43:56 【问题描述】:

问题

给定 word 如果没有按字母顺序排列的更大排列,则返回该单词的所有排列中按字母顺序排列的下一个较大的字符串返回“无答案”

例子

单词 = "baca"

所有按字母顺序排列的排列都是“aabc”、“abac”......还有更多。

我们需要在单词“baca”之后找到下一个按字母顺序更大的排列,那就是“bcaa”

“单词”的长度在 2 到 10^4 个字符之间。

我的问题

我的算法,能找到相关的词,但是太慢了(***由于递归调用太多)

我的方法

    找到所有排列并将它们添加到列表中 按字母顺序对上述列表进行排序 在列表中搜索“单词”并返回该单词之后的下一个元素,如果索引超出范围,则返回“No Answer”,或者如果反转的字符串等于原始字符串,则返回无答案。

代码

   public class Main 

    static ArrayList<String> arrayList = new ArrayList();


    public static void main(String args[])
    
        System.out.println(rearrangeWord("bacasadasdadasdzxczdasd"));
    

    public static String rearrangeWord(String word) 
        //Firstly we need to find and store all possible permutations in a lsit and then alphabetically sort our list
        if(word.length() == 0)
        
            return "no answer";
        

        if(new StringBuilder(word).reverse().toString() == word)
        
            return "no answer";
        
        String sol = "";
        permutation(word);
        Collections.sort(arrayList);
        for(int  i = 0; i<arrayList.size(); ++i)
        

            try
                if(arrayList.get(i).equals(word))
                
                    sol = arrayList.get(i+1);
                
            catch(IndexOutOfBoundsException e)
            
                return "no answer";
            

        
        return sol;

    

    public static void permutation(String str) 
        permutation("", str);
    

    public static void permutation(String prefix, String str) 
        int n = str.length();
        if (n == 0) arrayList.add(prefix);
        else 
            for (int i = 0; i < n; i++)
                permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n));
        

    

如何优化我的代码以处理更大的输入 2

【问题讨论】:

你的标题和你的问题描述很不一样。 【参考方案1】:

你可以在O(n)解决这个问题。

按照从左到右的路线。如果符号小于下一个符号,则交换它们的位置并反转此之后所有符号的顺序,直到最后一个符号,您找到了下一个排列。如果字符串中没有这样的字符对,那么这是最大排列

Algorithm to find next greater permutation of a given string

【讨论】:

以上是关于优化一个简单的缺失词算法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

⭐算法入门⭐《哈希表》简单02 —— LeetCode 41. 缺失的第一个正数

去重算法,简单粗暴&优化版

R语言︱异常值检验离群点分析异常值处理

在线性时间和恒定空间中查找数组中缺失和重复的元素

lstm预测基于鲸鱼算法优化lstm预测matlab源码

vue屏蔽敏感词,不使用算法的简单方法