首页 > 其他分享 >翻转字符串&翻转单词

翻转字符串&翻转单词

时间:2024-12-19 16:58:32浏览次数:5  
标签:arr return string len 单词 str 字符串 翻转

一、翻转字符串

问题描述

请实现⼀个算法,在不使⽤额外数据结构和储存空间的情况下,翻转⼀个给定的字符串(可以使⽤单个过程变量)。

解题思路

由于不允许使用额外的数据接口和存储空间,所以我们将⼀个字符串以中间字符为轴,前后翻转,也就是将str[len]赋值给str[0],将str[0]赋值str[len]

func revertStr(str string) string {
    arr := []byte(str)
    n := len(str)
    for i := 0; i < n/2; i++ {
        arr[i], arr[n-i-1] = arr[n-i-1], arr[i]
    }
    return string(arr)
}

 

二、前k个字符翻转

 

题解:反转每个下标从 2k 的倍数开始的,长度为 k 的子串。若该子串长度不足 k,则反转整个子串。

复杂度:

  • 时间复杂度:O(n),其中 n 是字符串 s 的长度。

  • 空间复杂度:O(1) 

 

func reverseStr(s string, k int) string {
    t := []byte(s)
    for i := 0; i < len(s); i += 2 * k {
        sub := t[i:min(i+k, len(s))]
        for j, n := 0, len(sub); j < n/2; j++ {
            sub[j], sub[n-1-j] = sub[n-1-j], sub[j]
        }
    }
    return string(t)
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

 

力扣:https://leetcode.cn/problems/reverse-string-ii/description/

三、字符串单词翻转

题解: 在一的基础上,先按空格分隔单词,然后逐个翻转拼接即可
时间复杂度:

 

func reverseWords(s string) string {
    s1 :=strings.Split(s," ")
    for k,_:=range s1 {
        s1[k] =string(reverse([]byte(s1[k])))
    }
    return strings.Join(s1," ")
}



//对byte进行翻转
func reverse(s []byte) []byte{
    first,last:=0,len(s)-1
    for last >first {
        s[first],s[last] = s[last],s[first]
        first++
        last--
    }
    return s
}

力扣:https://leetcode.cn/problems/reverse-words-in-a-string-iii/solutions/1925671/-by-gracious-vvilson1bb-cp35/

标签:arr,return,string,len,单词,str,字符串,翻转
From: https://www.cnblogs.com/-citywall123/p/18617577

相关文章

  • python的eval()函数的作用是将字符串转换成数值吗?
    不完全正确。Python的eval()函数的作用是将一个字符串作为Python表达式求值,并返回表达式的值。这意味着eval()可以处理各种数据类型和表达式,而不仅仅是将字符串转换成数值。例如:#将字符串转换为数值num_str="3+5"result=eval(num_str)print(result)#输出:8......
  • 华为OD E卷(100分)30-字符串变换最小字符串
    前言    工作了十几年,从普通的研发工程师一路成长为研发经理、研发总监。临近40岁,本想辞职后换一个相对稳定的工作环境一直干到老,没想到离职后三个多月了还没找到工作,愁肠百结。为了让自己有点事情做,也算提高一下自己的编程能力,无聊之余打算用一些大厂的编程题练练......
  • 【NLP 16、实践 ③ 找出特定字符在字符串中的位置】
    看着父亲苍老的白发和渐渐老态的面容希望时间再慢一些                                                ——24.12.19一、定义模型1.初始化模型①初始化父类super(TorchModel,self).__init__(): 调用父类nn.Mod......
  • R语言的字符串操作
    【图书推荐】《R语言医学数据分析实践》-CSDN博客《R语言医学数据分析实践李丹宋立桓蔡伟祺清华大学出版社9787302673484》【摘要书评试读】-京东图书(jd.com)R语言医学数据分析实践-R语言的数据结构-CSDN博客在R语言中,字符串是一种表示文本数据的数据类型。字符串......
  • 字符串合并与分割的正确方法是什么?
    在Python中,字符串的合并与分割操作可以通过split()和join()方法实现。以下是详细的说明:字符串分割(split)split()方法用于将字符串按照指定的分隔符分割成多个子字符串,并返回一个列表。如果不指定分隔符,默认使用空白字符(如空格、换行符、制表符等)进行分割。语法格式:str.split......
  • JS中把其它类型转成字符串的方法及规则是什么?
    在JavaScript中,有多种方法可以将其他类型转换为字符串。以下是一些常见的方法和规则:使用toString()方法:几乎所有的JavaScript对象都继承了toString()方法,该方法返回一个表示该对象的字符串。对于原始类型(如Number和Boolean),此方法会返回原始值的文本表示形式。对于数组和对象,默......
  • 3292. 形成目标字符串需要的最少字符串数 II
    给你一个字符串数组 words 和一个字符串 target。如果字符串 x 是 words 中 任意 字符串的 前缀 ,则认为 x 是一个 有效 字符串。 现计划通过 连接 有效字符串形成 target ,请你计算并返回需要连接的 最少 字符串数量。如果无法通过这种......
  • 前端知识点---字符串的函数
    文章目录1.length2.charAt(index)3.indexOf(searchValue,start)4.lastIndexOf(searchValue,start)5.slice(start,end)6.substring(start,end)7.substr(start,length)8.toUpperCase()和toLowerCase()9.trim()10.split(separator)11.replace(searchValue......
  • C语言数组和字符数组和字符串详解
    数组的概念和定义我们知道,要想把数据放入内存,必须先要分配内存空间。放入4个整数,就得分配4个int类型的内存空间:inta[4];这样,就在内存中分配了4个int类型的内存空间,共4×4=16个字节,并为它们起了一个名字,叫a。我们把这样的一组数据的集合称为数组(Array),它所包含的每一个数据叫......
  • C语言字符串指针
    C语言字符串指针(指向字符串的指针)详解C语言中没有特定的字符串类型,我们通常是将字符串放在一个字符数组中,这在《C语言字符数组和字符串》中已经进行了详细讲解,这里不妨再来演示一下:#include<stdio.h>#include<string.h>intmain(){charstr[]="http://c.biancheng.net......