php字符是否在字符串中出现,php 判断一个字符串中的字符是否都在另一个中出现(算法)...

博客探讨了一种更有效的字符串遍历方法,用于检查一个字符串的所有字符是否都包含在另一个字符串中。通过使用`str_split`、`array_unique`和`strpos`,在找到不匹配项时立即停止搜索,从而提高效率。对比传统方法,此算法在不同情况下能提升20%-50%的速度,特别是在处理长字符串时,效率提升可达1330%。
摘要由CSDN通过智能技术生成

楼上答案的效率基本上是可以的 ... 不过还有一些优化的空间 ... 如下 ...

$check_if_all_exist = function( $a, $b ) {

/* most effective way to traverse a string ... */

foreach( array_unique( str_split( $a ) ) as $a_single )

/* stop searching if we meet something not exists in $b ... */

if ( false === strpos( $b, $a_single ) )

/* all passes ..? */

return false; return true;

};

仅限原字符串只有字母数字的情况 ... 宽字符集的话会出错 ...

这比一次 strlen() 之后循环执行 substr() 效率要高很多 ... 这也是我能想到的效率最高的方式 ...

至于为什么没有在最后进行一次性 array_diff() 比较只是因为没有必要 ...

我们只是想知道 是否 字符串 A 里面的元素在 字符串 B 里都有 ... 而不是都有 哪些 重复 ...

一旦 字符串 A 里面出现了 字符串 B 里面没有的元素立即停止就好 ...

我写了几个 testcase ... 最佳的情况是 $a 和 $b 都非常长 ... 我的算法效率大概是楼上算法的 1330% ...

平常情况也会快 20% - 50% 不等 ... 并且楼上三行代码我也是三行 ... code 长度相差也不会很多 ...

想来想去也想不到什么效率更高的方法了 ... 恩恩 ... 就是这样啦 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值