美文网首页
算法(4):字符串

算法(4):字符串

作者: 大王叫我来巡老和山 | 来源:发表于2019-03-12 19:11 被阅读0次

  最近两天有点高产(只是说高数量,不是指高质量......),希望可以坚持下去,至少把这个算法系列先写完,给自己来点成就感......



字符串(String)

  字符串可以简单理解为一个 存放 unicode 编码的字符数组。大家可以对字符串执行几乎所有数组可以执行的操作。但是两者之间肯定是有一些不同之处的,甚至在不同语言当中,字符串的特性也会有所区别(如让人迷惑的 ‘==’ 操作)。当然,本算法系列主要针对python语言做讲解~
  不过,还是会简单说一下不同语言下string的区别~

  • 比较操作
      我们如果要使用 ‘==’ 来进行两个字符串的比较,那么要看一看这门语言是否支持操作符重载(operator overloading),如果支持,如C++,那么我们可以比较两个字符串是否内容一致。如果不支持,如Java,那么当我们使用‘==’时,相当于是在判断两个string是否为同一个对象。
      python,此时联手C++,也是可以用等号来判断两个string是否内容相同~

  • 可变和不可变(也就是能不能修改):
      在C++里面,字符串是可变的,相当于你操作字符串,可以像操作数组一样,使用索引更改元素。但是在 Java 里,字符串则不可变,如执行s = 'good evening'; s[4] = ','等类似修改字符串内容的操作,是不可以的。如果你想要哪怕只是更改一个字符,也需要新建一个字符串对象。
      而python,本次站队Java,将字符串视为不可变对象。
      当字符串不可变时,比如执行一个 s += 'a'操作,时间复杂度为O(n)(其中n为字符串s的长度)。因为这个时候,是建立了一个新字符串,分配给它(n+1)的空间,然后将字符串s和字符 ‘a' 复制过去。
      所以,如果你真的想要一个可修改的字符串,那么可以尝试建立一个字符数组(char array)。如果你很频繁的给字符串添加内容,则不妨使用其他数据结构,如Java里的(StringBuilder)。


问题1:求几个字符串的最长公共前缀( longest common prefix)
例子:
输入: ["flower","flow","flight"]
输出: "fl"

def longestCommonPrefix( strs: list) -> str:
    if not strs:
        return ""

    for i, letter_group in enumerate(zip(*strs)):
        if len(set(letter_group)) > 1:
            return strs[0][:i]
    else:
        return min(strs)

if __name__ == '__main__':
    s = ["flower","flow","flight"]
    ans = longestCommonPrefix(s)
    print(ans)

问题2:翻转字符串中的单词(Reverse Words in a String),字符串是一个句子,由若干单词组成,每个单词之间由空格隔开,现在要将字符串中单词翻转,例子如下。
输入: "Let's take LeetCode contest"
输出: "s'teL ekat edoCteeL tsetnoc"
用python内置函数很容易就写出来。

def reverseString( s: str) -> str:
    a = s.split()
    for i, j in enumerate(a):
        a[i] = a[i][::-1]
    return ' '.join(a)

if __name__ == '__main__':
    s = "Let's take LeetCode contest"
    ans = reverseString(s)
    print(ans)

问题3

没找到啥有趣的好题,例题先放放,我看到了有趣的会立刻补上来。

问题4



问题5



相关文章

  • 2019-05-08溢出省略、

    算法4:截断字符串:字符串指定长度溢出替换为省略号 算法5:指定长度分割字符串: 以下涉及的方法: slice(s...

  • KMP算法文章合集

    字符串的查找:朴素查找算法和KMP算法 暴力匹配算法与KMP算法(串的匹配) 字符串查找算法BF和KMP 字符串匹...

  • 文章收藏

    iOS面试题系列之常见算法 排序算法整理 字符串【3】最长回文子串【3】最长无重复子串【1*】字符串转数字【4】K...

  • iOS面试题汇总---算法类

    字符串 【3】最长回文子串 【3】最长无重复子串 【1*】字符串转数字 【4】KMP 算法 【2】字符串全排列 【...

  • 算法(4):字符串

      最近两天有点高产(只是说高数量,不是指高质量......),希望可以坚持下去,至少把这个算法系列先写完,给自己...

  • 字符串匹配算法

    场景:字符串A为主串,字符串B为模式串,比较字符串B是否能够在字符串A中进行匹配? 匹配算法:BF算法和RK算法。...

  • KMP字符串匹配算法

    KMP字符串匹配算法 先总结一下之前的几种字符串匹配算法 1 BF算法, 最简单的字符串匹配算法, 可以直接使用s...

  • 数据结构与算法 -- 串,BF算法和RK算法

    BF算法 BF(Brute Force)算法,即暴力匹配算法 如果在字符串A中查找字符串B,那么字符串A就是主串,...

  • 字符串匹配

    indexOf 底层就是使用字符串匹配算法 字符串匹配算法很多 BF( Brute Force)算法 暴力匹配算...

  • 数据结构与算法-字符串

    字符串又被成为串 字符串的存储结构 字符串的比较 朴素的模式匹配算法 BF算法

网友评论

      本文标题:算法(4):字符串

      本文链接:https://www.haomeiwen.com/subject/ylfopqtx.html