求两个字符串的第⼆⻓公共单词&PHP

求两个字符串的第⼆⻓公共单词

题目描述:

        求出字符串 s 与字符串 t 的第⼆⻓公共单词(这⾥,假设两个字符串均由英⽂字⺟和空格字符组成);若找到这样的公共单词,函数返回该单词,否则,函数返回NULL,如果有多个满⾜要求,则返回第⼀个单词。

        例如:若 s=“This is C programming text”,t=“This is a text for C programming”,则函数返回“This”。

实现思路:

        1. 字符串变数组

        2. 去重(省去多余时间)

        3. 排序,按单词长度降序排序(可以省略)

        4. 返回出字符串最长的前两个

代码实现:

function getSecondWord($s,$t)

{

// 字符串不为空

if (empty($s)) return null;

if (empty($t)) return null;

// 1. 字符串变数组

$arr1 = explode(' ',$s);

$arr2 = explode(' ',$t);

// 至少两个单词

if (count($arr1) < 2) return null;

if (count($arr2) < 2) return null;

// 2. 去重,省去多余时间

$arr1 = array_unique($arr1);

$arr2 = array_unique($arr2);

// 3. 排序,按单词长度降序排序

usort($arr1,'compare');

usort($arr2,'compare');

// 相同返回第二个

if ($arr1 == $arr2) return $arr1[1];

// 4. 返回出字符串最长的前两个

$arr = [];

foreach ($arr1 as $k => $v) {

foreach ($arr2 as $kk => $vv) {

if ($v == $vv) {

$arr[] = $v;

}

}

}

if (count($arr) > 1) {

return $arr[1];

} else {

return null;

}

}

// 比较函数

function compare($a,$b)

{

if (strlen($a) == strlen($b)) {

return 0;

}

return (strlen($a) < strlen($b)) ? 1 : -1;

}

函数调用

$s = 'This is a text for C programming';

$t = 'This is C programming text';

$second_word = getSecondWord($s,$t);

echo '第⼆⻓公共单词为:',$second_word;

输出结果:

This

最后总结:

        文章中主要用了 usort 和 array_unique 函数,以及比较函数compare。如有问题,欢迎指正!

千而の大狮子!

ps:个人博客:www.qianern.cn,欢迎点击!

相关文章

Hessian开源的远程通讯,采用二进制 RPC的协议,基于 HTTP 传输。可以实现PHP调用Java,Python,C#等多语...
初识Mongodb的一些总结,在Mac Os X下真实搭建mongodb环境,以及分享个Mongodb管理工具,学习期间一些总结...
边看边操作,这样才能记得牢,实践是检验真理的唯一标准.光看不练假把式,光练不看傻把式,边看边练真把式....
在php中,结果输出一共有两种方式:echo和print,下面将对两种方式做一个比较。 echo与print的区别: (...
在安装好wampServer后,一直没有使用phpMyAdmin,今天用了一下,phpMyAdmin显示错误:The mbstring exte...
变量是用于存储数据的容器,与代数相似,可以给变量赋予某个确定的值(例如:$x=3)或者是赋予其它的变...