当前位置: 首页 > 面试题库 >

Oracle-字符串组合排列

厉高逸
2023-03-14
问题内容

我认为我有一个复杂的要求。

它是使用Oracle 10.2的组合排列,我能够使用笛卡尔联接来解决它,但是我认为它需要一些改进以使其更简单,更灵活。

主要行为。

输入字符串 :“一二”

输出 :’一’‘二’‘一二’‘二一’

对于我的解决方案,我将字符串数限制为5(请注意,输出是阶乘附近的数字)

SQL:

with My_Input_String as (select 1 as str_id, 'alpha beta omega gama' as str from dual )

--------logic-------

, String_Parse as (
                    SELECT REGEXP_SUBSTR(str, '[^ ]+', 1, ROWNUM) str
                    FROM My_Input_String
                    where rownum < 6 -- string limitation --
                    CONNECT BY level <= LENGTH(REGEXP_REPLACE(str, '([^ ])+|.', '\1') ) 
                  )

--------CRAP select need refactoring-------

select str from String_Parse
union
select  REGEXP_REPLACE(trim(s1.str||' '||s2.str||' '||s3.str||' '||s4.str||' '||s5.str), '( ){2,}', ' ') as str
from

(select str from String_Parse union select ' ' from dual) s1,
(select str from String_Parse union select '  ' from dual) s2,
(select str from String_Parse union select '   ' from dual) s3,
(select str from String_Parse union select '    ' from dual) s4,
(select str from String_Parse union select '     ' from dual) s5
where 
--
s1.str <> s2.str and s1.str <> s3.str and s1.str <> s4.str and s1.str <> s5.str
--
and s2.str <> s3.str and s2.str <> s4.str and s2.str <> s5.str
--
and s3.str <> s4.str and s3.str <> s5.str
--
and s4.str <> s5.str

问题答案:

编辑:得到了通用的。最终真的很简单(但是花了我一段时间才到达那里)

WITH words AS
(   SELECT  REGEXP_SUBSTR( '&txt', '\S+', 1, LEVEL )    AS word
        ,   LEVEL                                       AS num
    FROM    DUAL
    CONNECT BY LEVEL <= LENGTH( REGEXP_REPLACE( '&txt', '\S+\s*', 'X' ) )
)
SELECT  SYS_CONNECT_BY_PATH( W.word, ' ' )
FROM    words   W
CONNECT BY NOCYCLE PRIOR W.num != W.num

Edit2:删除了多余的maxnum东西。先前尝试遗留下来的



 类似资料:
  • 本文向大家介绍Java排列组合字符串的方法,包括了Java排列组合字符串的方法的使用技巧和注意事项,需要的朋友参考一下 例如 输入“abc”,打印所有可能出现的组合情况,并且消除重复值。 所谓排列组合如下: 排列组合,字符串:abc bca acb abc cba bac cab 排列组合个数:6 实现代码(结合Java8 lambda表达式实现) 如有更简洁的代码实现,请不要吝啬,贴出来分享下。

  • 我正在玩排序数组,我弄清楚了如何对int数组进行合并排序。但是我不知道合并字符串数组。在正常排序时,对字符串数组进行排序很容易,但合并排序不同。我到目前为止所做的代码如下,正在处理int数组。

  • 本文向大家介绍java实现字符串排列组合问题,包括了java实现字符串排列组合问题的使用技巧和注意事项,需要的朋友参考一下 本文为大家介绍了java实现字符串排列组合问题,供大家参考,具体内容如下 组合: 要么选择长度为n的字符串中的第一个字符,那么要在其余的长度n-1的字符串中选择m-1个字符 要么不选择长度为n的字符串中的第一个字符,那么要在其余的长度n-1的字符串中选择m个字符 以上就是本文

  • 我有一个程序,它接受一个单词和一个文本文件字典,并在字典中搜索与给定单词相等的单词组合(是字母表)。 我最后得到了一个字符串数组的Arraylist,每个数组都是一个包含它所使用的单词的解决方案,Arraylist是所有的解决方案。 它首先按字长(降序)排序,然后对等长字使用字母排序。 我现在对各个数组进行了排序,但我正试图按照某些规则在arraylist中对它们进行排序: 按字数递增 对于包含相

  • 我一直在尝试在我正在开发的程序中实现各种类型的排序。到目前为止,我已经成功地对整数进行了排序。为了使这个(合并)代码排序为字符串数组而不是整数数组,需要做哪些更改?时间复杂度会变化吗?如果是这样,是好是坏? 编辑1:尝试使用比较器。有些事情似乎不对劲。返回错误,例如无法从字符串转换为int,反之亦然。固定的 编辑2:我在if(数组[low].compareTo(数组[high])行得到NullPo

  • 我在名为的类中有一个链表,它包含以下属性: 我有另一个类,它是“实际列表”,它只包含对列表头部的引用,这个类被称为“文本列表”,它接收一个字符串,并假设将该字符串的每个单词排序在列表中。例如,对于句子: 链接列表如下所示: 箭头就像指向列表中下一个节点的指针。 我想先把所有的单词放在一个链表中(类),然后做一个MERGE SORT来对链表中的单词进行排序。 我想做的是采用拆分方法将列表拆分为两个列