golang——reverse反转字符串

reverse反转,是个比较基础算法。要实现这个方法,从常理考虑可以申请一个新空间,然后将字符串的从尾到头依次填充该空间,最后新空间的内容就是反转后的结果了,这个方式的算法复杂度是O(n),并且还需要重新申请空间。

然而通过对字符串前后对调实现的,方法非常优雅,复杂度一下就降到了O(n/2)。用golang语言模拟如下:

package main

import (
    "fmt"
)

func main() {
    s := "hello,golang语言"
    fmt.Println(reverseString(s))
    fmt.Println(reverseString(reverseString(s)))
    // output: 言语gnalog,olleh
    // output: hello,golang语言
}

// 反转字符串
func reverseString(s string) string {
    runes := []rune(s)
    for from, to := 0, len(runes)-1; from < to; from, to = from+1, to-1 {
        runes[from], runes[to] = runes[to], runes[from]
    }
    return string(runes)
} 

golang这边需要先将字符串string转换成rune类型,而后才能进行对调操作.

原文地址:https://www.cnblogs.com/unqiang/p/12052282.html

时间: 2024-10-13 19:46:02

golang——reverse反转字符串的相关文章

345. 反转字符串中元音字母的位置 Reverse Vowels of a String

Write a function that takes a string as input and reverse only the vowels of a string. Example 1:Given s = "hello", return "holle". Example 2:Given s = "leetcode", return "leotcede" 题意:反转字符串中元音字母的位置 方法1:用栈保存元音字符串,时间

Leetcode#557. Reverse Words in a String III(反转字符串中的单词 III)

题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode contest" 输出: "s'teL ekat edoCteeL tsetnoc" 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格. 思路 分割字符串,再逆序,拼接到字符串 代码实现 package String; /** * 557. Reverse Words in a St

Leetcode 344:Reverse String 反转字符串(python、java)

Leetcode 344:Reverse String 反转字符串 公众号:爱写bug Write a function that reverses a string. The input string is given as an array of characters char[]. Do not allocate extra space for another array, you must do this by modifying the input array in-place wit

反转字符串

问题: 1.反转字符串,比如str=“hello world!!!",反转后ret=“!!!dlrow olleh"; 代码如下: #include <stdio.h> #include <stdlib.h> char* reverse(char inp[],int size){ if(size<0) return NULL; //NULL代表空地址,null只是一个符号 int i=0,j=size-1; while(i<j){ char tmp=

C# 反转字符串方法

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 反转字符串 { class Program { static void Main(string[] args) { string ss = Reserver("abcdefg"); Console.Write(ss); //数组里面有一个方法用来反转的 除了今天上午用到这个还可以用这个 } ///

Java反转字符串

前几天看见一篇文章,说使用Java能用几种方式反转一个字符串.首先要明白什么叫反转字符串,就是将一个字符串到过来啦,比如"倒过来念的是小狗"反转过来就是"狗小是的念来过倒".接下来就把自己能想到的所有方式记录下来了. 1.第一个念头就是直接使用String类的反转方法,对不起,这样是不行的,因为String类没有这个方法.那么好吧,搞个数组,然后遍历数组,依次调换数组中对应的各个字符. // 直接使用数组首位调换 public String reverse1(Str

【LeetCode-面试算法经典-Java实现】【152-Reverse Words in a String(反转字符串中的单词)】

[152-Reverse Words in a String(反转字符串中的单词)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an input string, reverse the string word by word. For example, Given s = "the sky is blue", return "blue is sky the". 题目大意 给定一个字符串,将其反转,其的字词不转 解题思路

Java反转字符串的方式?

1. 将String转换成字符数组,再利用字符数组进行首尾调换. 2. 利用递归的方式,主要是:reverse(str.substring(1)) + str.charAt(0); 3. 虽然String类没有反转字符串的方法,但是StringBuffer有这个方法,可以借助StringBuffer的这个方法:sb.reverse(); 4. 借助StringBuffer的其他方法,比如:sb.setCharAt(swapIndex,sb.charAt(i)); 再比如:append方法. 5.

按单词(word)反转字符串(string)输出(output)——不用额外缓存(without a buffer)

一道笔试题,纸上写的,誊到电脑上并调试通过并改善. 没经验,菜鸟摸索的野蛮算法,不知道有没有更简洁更抽象的算法. 打算用现成字符串操作函数的请绕行搜索. 原题是不用buffer(缓存)反转字符串打印输出,受OJ的毒害,我就认为只要逆序打印就行了(要是把原字符串改了,我还真不知道怎么办到,尤其听说字符串常量不能被更改,在文章尾部会做验证). v0.1: 用了一下递归,思路是用指针遍历字母,每碰到空格就用新指针往下递归调用一次,碰到结束符呢,就结束呗.有两个细节,如果空格之后还是空格呢?所以你需要指