问题描述
嗨,
有没有什么简单的优化方法来找到字符串中最可能的回文数。字符串可以是1000个字符。
先谢了。
有没有什么简单的优化方法来找到字符串中最可能的回文数。字符串可以是1000个字符。
先谢了。
专家解答
这* *可以用纯SQL来完成,但事实是,这将是
a)读取和维护可能更复杂,以及
b)有些浪费了练习,因为我们无论如何都要调用UTL_Waw。
人们可能会说“嘿,在SQL中使用逆向函数”,但由于它没有文档化...你在那里处于一个滑坡。
因此,这里有一个简单的PLSQL例程来完成这个任务- -您可以通过它们,无论您需要它们全部,还是只通过最大的。
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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




