1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| 思路: 遍历字符串从左到右,内部遍历字符串从右到左,出现两个元音字母交换位置,直到两个遍历的下标相遇
代码: /** * @param String $s * @return String */ function reverseVowels($s) { // 元音字符串 $str = 'aeiouAEIOU'; $len = strlen($s);
$lastJ = $len - 1; for ($i = 0; $i < $len - 1; $i++) { // 两个遍历的下标相遇,结束遍历 if ($i >= $lastJ) { return $s; } // 从左往右遍历,直到获取到元音字符 if (false === strpos($str, $s[$i])) { continue; } // 从右向左遍历 for ($j = $lastJ; $j > 0; $j--) { if (false === strpos($str, $s[$j])) { continue; } // 直到获取到元音字符,替换字符位置 $temp = $s[$i]; $s[$i] = $s[$j]; $s[$j] = $temp;
// 记录遍历的下标,下次遍历从下标的左边一个下标开始 $lastJ = $j-1; break; } }
return $s; }
|