字符串

Index

模式匹配 TODO

模式匹配基本方法

字符串模式匹配算法——BM、Horspool、Sunday、KMP、KR、AC算法 - 单车博客园 - 博客园

  • 双指针

  • KMP

  • ...

进制转换

10进制转任意进制

递归方法

迭代方法

任意进制转10进制

迭代方法

长地址转短地址

短 URL 系统是怎么设计的? - 知乎

基本思路

  • 发号策略:给每一个收录的长地址,分配一个自增索引

  • 将分配的索引转换为一个 62 进制数(10数字+26大写字母+26小写字母)

  • 注意,发号机制不会判断是否重复

重复长地址怎么处理?

  • 如果要求相同的长地址要对应唯一的短地址,那么唯一的方法就是维护一个映射表

  • 但是维护一个映射表可能比忽略重复需要更多的空间

  • 一个折衷的方法是——维护一个“最近”的长对短映射,比如采用一小时过期的机制来实现 LRU 淘汰

    • 当一个地址被频繁使用,那么它始终在这个 key-value 表中,总能返回当初生成那个短地址

    • 如果它使用并不频繁,那么长对短的 key 会过期,LRU 机制就会自动淘汰掉它

如何保证发号器的大并发高可用?

  • 如果做成分布式的,那么多节点要保持同步加 1,多点同时写入,以 CAP 理论看,很难做到

  • 一个简单的处理方式是,使用多个发号器,以奇偶/尾数区分

    • 比如一个发单号,一个发双号;

    • 或者实现 1000 个发号器,分别发尾号为 0 到 999 的号;每发一个号,每个发号器加 1000,而不是加 1

功能函数

atoi()

功能简述

  • 将字符串(C风格)转换成整型;

  • 会跳过前面的空格字符,直到遇上数字或正负号才开始转换;

  • 如果遇到的第一个字符不是数字,则返回 0,并结束转化;

  • 当遇到非数字结束符('\0') 时结束转化,并将结果返回(整型)

  • 如果发生溢出,则输出 INT_MAX 或 INT_MIN;

  • 内置 atoi 不会处理 NULL 指针

合法样例

核心代码(C++)

  • 除了核心代码,更重要的是异常处理溢出判断

完整代码

表达式转化(中缀,后缀,前缀)

前缀、中缀、后缀表达式 - CSDN博客

为什么要把中缀表达式转化为后缀,前缀?

  • 计算机无法直接计算带有括号,以及区分优先级的表达式,或者说很难计算。

  • 使用后缀,前缀,消除了括号和优先级。

如何计算后缀,前缀表达式?

中缀转后缀

思路

  • 从左到右遍历中缀表达式,遇到操作数则输出;遇到操作符,若当前操作符的优先级大于栈顶操作符优先级,进栈;否则,弹出栈顶操作符,当前操作符进栈。(这只是一段比较粗糙的描述,更多细节请参考链接或下面的源码)

    中、前、后缀表达式 - CSDN博客

C++(未测试) <!-- - 只测试了部分样例,如果有未通过的样例请告诉我

  • 以下代码中有一些循环可能是多余的;如果字符串合法,应该只需要判断一次,而不需要循环处理(未验证) -->

    ```C++

    include

    include

    include

    include

    include

    include

    using namespace std;

//set l1{ '+', '-' }; //set l2{ '*', '/' }; // //vector> l{ l1, l2 };

int get_level(char c) { switch (c) { case '+': case '-': return 1; case '*': case '/': return 2; //case '(': // return 3; default: return -1; } }

string infix2suffix(const string& s) { stack tmp; // 符号栈 queue ans; // 必须使用 string 队列,因为可能存在多位数字 //stringstream ret; // 用字符流模拟队列

}

void solve() { // 只测试了以下样例,如果有反例请告诉我

}

```

最后更新于

这有帮助吗?