暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何在字符串中找到可能的回文组合

askTom 2015-11-20
112

问题描述

嗨,
有没有什么简单的优化方法来找到字符串中最可能的回文数。字符串可以是1000个字符。

先谢了。

专家解答

这* *可以用纯SQL来完成,但事实是,这将是

a)读取和维护可能更复杂,以及
b)有些浪费了练习,因为我们无论如何都要调用UTL_Waw。

人们可能会说“嘿,在SQL中使用逆向函数”,但由于它没有文档化...你在那里处于一个滑坡。

因此,这里有一个简单的PLSQL例程来完成这个任务- -您可以通过它们,无论您需要它们全部,还是只通过最大的。


SQL> create or replace
  2  type str_list is table of varchar2(4000);
  3  /

Type created.

SQL>
SQL> create or replace
  2  function list_palindromes(p_str varchar2, p_largest_only varchar2 default 'N') return str_list pipelined is
  3    l_str_len int := length(p_str);
  4    
  5    l_candidate varchar2(1000);
  6    l_found boolean := false;
  7  begin
  8    for i in reverse 2 .. l_str_len 
  9    loop
 10      for j in 1 .. l_str_len - i + 1
 11      loop
 12        l_candidate := substr(p_str,j,i);
 13        if upper(l_candidate) = utl_raw.cast_to_varchar2( utl_raw.reverse ( utl_raw.cast_to_raw(upper(l_candidate)))) then
 14          pipe row (l_candidate);
 15          l_found := true;
 16        end if;
 17      end loop;
 18      if p_largest_only = 'Y' then
 19         exit when l_found;
 20      end if;
 21    end loop;
 22  end;
 23  /

Function created.

SQL> sho err
No errors.
SQL>
SQL> select * from table(list_palindromes(p_str=>'abaxyzaghjkkjhga'));

COLUMN_VALUE
----------------------------------------------------------------------------------------------------------------------------------
ghjkkjhg
hjkkjh
jkkj
aba
kk

5 rows selected.

SQL>
SQL> select * from table(list_palindromes(p_str=>'abaxyzaghjkkjhga',p_largest_only=>'Y'));

COLUMN_VALUE
----------------------------------------------------------------------------------------------------------------------------------
ghjkkjhg

1 row selected.




「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论