小雨同学的技术博客

想起那夕阳下的奔跑,那是我逝去的青春。

【PHP】给两个字符串返回字符串按排序出两个字符串的字符de多种解法

问题描述

给出两个字符串s1和s2,两个字符串仅包含a-z,返回一个排序后的字符串,包含这两个字符串的内容,每个字母只出现一次。

举例:

a = "xyaabbbccccdefww" b = "xxxxyyyyabklmopq" 
longest(a, b) -> "abcdefklmopqwxy"


a = "abcdefghijklmnopqrstuvwxyz" 
longest(a, a) -> "abcdefghijklmnopqrstuvwxyz"

分析&解决

涉及到的问题

  • 排序
  • 去重

按数组的方式

  1. 把两个字符串转化成数组
  2. 对数组进行去重和排序
function longest($a, $b) {
    //转化成数组
    $arr_a = str_split($a);
    $arr_b = str_split($b);
    //数组合并
    $arr_me = array_merge($arr_a,$arr_b);
    //数组去重
    $arr_me = array_unique($arr_me);
    //数组排序
    array_multisort($arr_me);
    //转换成字符串
    return  implode($arr_me);
}

count_chars()

count_chars() 函数返回字符串中所用字符的信息(例如,ASCII 字符在字符串中出现的次数,或者某个字符是否已经在字符串中使用过)。

count_chars(string,mode)

string  必需。规定要检查的字符串。
mode    
可选。规定返回模式。默认是 0。以下是不同的返回模式:
0 - 数组,ASCII 值为键名,出现的次数为键值
1 - 数组,ASCII 值为键名,出现的次数为键值,只列出出现次数大于 0 的值
2 - 数组,ASCII 值为键名,出现的次数为键值,只列出出现次数等于 0 的值
3 - 字符串,带有所有使用过的不同的字符
4 - 字符串,带有所有未使用过的不同的字符

这里用3

解决代码

function longest($a, $b) {
    return count_chars($a.$b, 3);
}

正则表达式

解决代码

function longest($a, $b) {
    $c = str_split($a.$b); sort($c); 
    $e = preg_replace('/(\w)\1+/', "$1", implode("", $c));
    return $e;
}

前面完成的还是之前的方法中的转化数组、排序数组的过程,正则表达式的作用是字符串的去重。

总结

  • 一个问题出现必定会有不同的解决思路
  • 条条大路通罗马
  • 大量数据计算下可以比较出哪种方法更快
阅读更多

扫码向博主提问

去开通我的Chat快问

diandianxiyu

博客专家

非学,无以致疑;非问,无以广识
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/diandianxiyu/article/details/74839137
文章标签: php
个人分类: PHP
所属专栏: PHP问题集锦
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭