【问题标题】:Trying to solve Split Strings 6kyu challenge on codewars with PHP尝试使用 PHP 解决代码战中的拆分字符串 6kyu 挑战
【发布时间】:2022-01-14 19:56:11
【问题描述】:

我真的被困在这个代码战挑战中:https://www.codewars.com/kata/515de9ae9dcfc28eb6000001/train/php。我觉得我很接近,但我不确定我在这一点上做错了什么。到目前为止,这是我的代码:

function solution($str) {
  $newStr = "";
  
  strlen($str) % 2 === 0 ? $newStr = $str : $newStr = $str.'_';
  $arr = str_split($newStr, 2);
  $finalArr = [];
  for ($i = 0; $i < count($arr); $i++) {
    if ($i % 2 !== 0) {
      array_push($finalArr, $arr[$i-1], $arr[$i], $arr[$i+1]);
    }
  }
  return $finalArr;
}

这是我在输出中遇到的错误:

Failed asserting that two arrays are equal.
Expected: Array (
    0 => 'ab'
    1 => 'cd'
    2 => 'ef'
    3 => 'g_'
)
Actual  : Array (
    0 => 'ab'
    1 => 'cd'
    2 => 'ef'
    3 => 'ef'
    4 => 'g_'
    5 => null
)

更新:所以我做了另一个编辑,让我更接近解决这个问题。我还添加了挑战本身的链接,对于最初没有这样做,我深表歉意。代码如下:

function solution($str) {
  $newStr = "";
  
  strlen($str) % 2 === 0 ? $newStr = $str : $newStr = $str.'_';
  $arr = str_split($newStr, 2);
  $finalArr = [];
  for ($i = 0; $i <= count($arr); $i++) {
    if ($i % 2 !== 0) {
      array_push($finalArr, $arr[$i-1], $arr[$i]);
    }
  }
  return $finalArr;
}

这是我现在得到的输出:

Failed asserting that two arrays are equal.
Expected: Array (
    0 => 'ab'
    1 => 'cd'
    2 => 'ef'
)
Actual  : Array (
    0 => 'ab'
    1 => 'cd'
    2 => 'ef'
    3 => null
)

【问题讨论】:

  • 我们应该如何猜测这个挑战的要求是什么?
  • 我猜你说的是codewars.com/kata/515de9ae9dcfc28eb6000001/discuss。由于您已经有一个由 1 个或 2 个字符串组成的数组,因此您正在做一些不必要的工作。我建议检查最后一个值的长度,看看它是一个还是两个字符

标签: php arrays string


【解决方案1】:

您可以将函数更新为:

function solution($str) {
    return $str === "" ? [] : str_split(
        strlen($str) % 2 === 0 ? $str : $str . '_', 2
    );
}

如果有空字符串,该函数将返回一个空数组。

否则它将检查字符串是否包含偶数个字符。

如果是偶数,则返回$str。如果它是奇数,则附加 _ 以使其与 str_split 相等,从而为所有值返回 2 个字符。

【讨论】:

    最近更新 更多