字符串

作者: 云莉6 | 来源:发表于2020-05-17 20:54 被阅读0次

概念

是由零个或多个字符组成的有限序列。一般记为 s = a1a2…an (0<=n<=∞)。它是编程语言中表示文本的数据类型。

实现

参考:https://lemire.me/blog/2017/07/07/are-your-strings-immutable/

在一个面向对象语言把字符串表示为对象的情况下,

  • 可变的 mutable:值在运行期可以变更;
  • 不变的 immutable:值在创建后就不可变更了。

字符串不可变的语言:

  • Java
  • C#
  • JavaScript
  • Go

字符串可变的语言:

  • Ruby
  • PHP

对字符串可变性限制弱的语言:

  • C、C++ 用 const 限定字符串不可变,也可以不限定
  • Swift 用 let 限定字符串不可变,也可以不限定

字符串定义

Python

x = ‘abbc’
x = “abbc"

Java

String x = “abbc”;

C++

string x(“abbc”);

字符串遍历

Python

for ch in “abbc”: 
     print(ch)

Java

String x = “abbc”; 
for (int i = 0; i < x.size(); ++i) { 
     char ch = x.charAt(i); 
} 
for ch in x.toCharArray() { 
     System.out.println(ch); 
}

C++

string x(“abbc”); 
for (int i = 0; i < s1.length(); i++) { 
     cout << x[i]; 
}

字符串比较

Java

String x = “abb”;

String y = “abb”;

x == y —-> false

x.equals(y) —-> true

x.equalsIgnoreCase(y) —-> true

字符串匹配算法

  • 暴力法(brute force)- O(mn)

  • Rabin-Karp 算法

     在朴素算法中,我们需要挨个比较所有字符,才知道目标字符串中是否包含子串。
    
     为了避免挨个字符对目标字符串和子串进行比较,我们可以尝试一次性判断两者是否相等。因此,我们需要一个好的哈希函数(hash function)。通过哈希函数,我们可以算出子串的哈希值,然后将它和目标字符串中的子串的哈希值进行比较。这个新方法在速度上比暴力法有显著提升。
    
     Rabin-Karp 算法 的思想:
     1. 假设子串的长度为 M(pat),目标字符串的长度为 N(txt);
     2. 计算子串的 hash 值 hash_pat;
     3. 计算目标字符串 txt 中每个长度为 M 的子串的 hash 值(共需要计算 N-M+1 次)
     4. 比较 hash 值:如果 hash 值不同,字符串必然不匹配;如果 hash 值相同,还需要使用朴素算法再次判断。
    
  • KMP 算法

    Knuth-Morris-Pratt KMP  的思想是,当子串与目标字符串不匹配时,其实你已经知道了前面已经匹配成功的那一步部分字符(包括子串和目标字符串),设法利用这个已知信息,不要把“搜索位置”移回比较过的位置,继续把它后移,这样就提高了效率。
    

    参考链接:

  • Boyer-Moore 算法:https://www.ruanyifeng.com/blog/2013/05/boyer-moore_string_search_algorithm.html

  • Sunday 算法:https://blog.csdn.net/u012505432/article/details/52210975

相关文章

  • Javascript知识点整合

    字符串 单行字符串: ‘字符串’或“字符串” 多行字符串: `多行字符串` 字符串操作: 字符串连接‘+’号 长度...

  • C++基础字符串

    字符串的构造 字符串特性描述 字符操作 字符串赋值 字符串连接 字符串比较 字符串查找 字符串替换 字符串删除 字...

  • iOS中的NSString与NSMutableString

    字符串的创建 字符串读写 字符串的比较 字符串的搜索 字符串截取 字符串替换 字符串与路径 字符串转换 NSMut...

  • iOS NSString用法总结

    字符串属性 字符串截取 字符串比较 字符串搜索 字符串拼接 字符串基本类型转换 字符串分行,分段 字符串列举(按条...

  • php 字符串常见方法汇总

    字符串拼接 字符串检索 字符串截取 字符串替换 字符串大小写转化 字符串转数组 字符串格式化

  • iOS 字符串截取、iOS 字符串替换、iOS 字符串分隔、iO

    iOS之字符串截取、iOS 字符串替换、iOS字符串分隔、iOS之字符串匹配、截取字符串、匹配字符串、分隔字符串 ...

  • PHP中字符串函数库常用函数解析 -- PHP 学习 (十一)

    常用字符串函数分类: 字符串长度, 字符串查找, 字符串大小写转换, 字符串截取, 字符串 ASCII, 字符串加...

  • Kotlin语言(二):字符串类型

    1、字符串定义 2、字符串删除空格 3、字符串比较 4、字符串切割 5、字符串截取 6、字符串替换 7、字符串模板

  • 字符串扩展

    求字符串大小 字符串解码、转换 字符串截取 字符串汉字处理 字符串 Mac地址 字符串进制转换

  • 2020-09-30字符串

    day8-字符串 字符串的操作 in 和 not in字符串1 in 字符串2 - 判断字符串1是否是字符串...

网友评论

    本文标题:字符串

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