【=翻转字符串=】
题目描述
解题思路
思路一:【排除】将数组组装成字符串,翻转字符串,最后将字符串在分隔成数组即可。理论上是完全可行。
但是!!! 但是!!! 但是!!!
leetcode的测试用例中包含了所有你能想到的字符,从而导致无法通过(如PHP对应图)
思路二:双指针,分别指向首、尾字符,在交换其位置即可。
解题方法
PHP
// 思路一(错误)
function reverseString(&$s) {
$s = explode(",", strrev(implode(",", $s)));
return $s;
}
// 思路二
function reverseString(&$s) {
$left = 0;
$right = count($s)-1;
while($left < $right) {
$tmp = $s[$right];
$s[$right] = $s[$left];
$s[$left] = $tmp;
$left++;
$right--;
}
return $s;
}
- GO
func reverseString(s []byte) []byte {
var left, right = 0, len(s)-1
for left < right {
temp := s[right]
s[right] = s[left]
s[left] = temp
left++
right--
}
return s
}
【=反转字符串中的单词=】
题目描述
解题思路
思路:依据字符串中空格作为分隔符,将字符串分隔为数组,对其每个元素进行字符串反转,最后再将其组装成字符串
解题方法
- PHP
function reverseWords($s) {
$new = explode(" ", $s);
foreach($new as $k =>$v) {
$new[$k] = strrev($v);
}
return implode(" ", $new);
}
- GO
// 思路一
// 指针f找到空格
// 双指针反转单词
func reverseWords(s string) string {
var news = []rune(s)
f := 0
for f<len(news) {
l := f
for f < len(news) && news[f] != ' ' {
f++
}
r := f-1
for l<r{
news[l],news[r] = news[r], news[l]
l++
r--
}
f++
}
return string(news)
}
// 思路二
// 遍历字符串,遇到空格就停止
// 双指针反转单词
func reverseWords(s string) string {
var news = []rune(s)
l:= 0
for k,v :=range news{
if v == ' ' || k == len(news)-1 {
r := k-1
if(k==len(news)-1) {
r = k
}
for l < r {
news[l], news[r] = news[r], news[l]
l++
r--
}
l = k+1
}
}
return string(news)
}