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

标签: php
532人阅读 评论(0) 收藏 举报
分类:

问题描述

给出两个字符串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;
}

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

总结

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

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:415342次
    • 积分:6600
    • 等级:
    • 排名:第3775名
    • 原创:260篇
    • 转载:13篇
    • 译文:3篇
    • 评论:60条
    博客专栏
    个人网站
    微信订阅号
    欢迎加入QQ群
    玩家老黄历(微信小程序)
    最新评论