问题描述
给出两个字符串s1和s2,两个字符串仅包含a-z,返回一个排序后的字符串,包含这两个字符串的内容,每个字母只出现一次。
举例:
a = "xyaabbbccccdefww" b = "xxxxyyyyabklmopq"
longest(a, b) -> "abcdefklmopqwxy"
a = "abcdefghijklmnopqrstuvwxyz"
longest(a, a) -> "abcdefghijklmnopqrstuvwxyz"
分析&解决
涉及到的问题
- 排序
- 去重
按数组的方式
- 把两个字符串转化成数组
- 对数组进行去重和排序
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;
}
前面完成的还是之前的方法中的转化数组、排序数组的过程,正则表达式的作用是字符串的去重。
总结
- 一个问题出现必定会有不同的解决思路
- 条条大路通罗马
- 大量数据计算下可以比较出哪种方法更快
时间: 2024-11-01 14:44:31