第二天 2021-3-4 每日刷两题之一
Leetcode知识树
一、C++ string函数方法大全
查找
成员方法 作用 str.find(“ab”) 返回字符串 ab 在 str 的第一个位置 str.rfind(“ab”) 返回字符串 ab 在 str 的最后一个位置 str.find(“ab”, 2) 在 str[2]~str[n-1] 范围内查找并返回字符串 ab 在 str 的位置 str.rfind(“ab”, 2) 在 str[0]~str[2] 范围内查找并返回字符串 ab 在 str 的位置 str.find_first_of(“apple”) 返回 apple 中任何一个字符首次在 str 中出现的位置 str.find_first_of(“apple”, 2) 返回 apple 中任何一个字符首次在 str[2]~str[n-1] 范围中出现的位置 str.find_first_not_of(“apple”) 返回除 apple 以外的任何一个字符在 str 中首次出现的位置 str.find_first_not_of(“apple”, 2) 返回除 apple 以外的任何一个字符在 str[2]~str[n-1] 范围中首次出现的位置 str.find_last_of(“apple”) 返回 apple 中任何一个字符最后一次在 str 中出现的位置 str.find_last_of(“apple”, 2) 返回 apple 中任何一个字符最后一次在 str[0]~str[2] 范围中出现的位置 str.find_last_not_of(“apple”) 返回除 apple 以外的任何一个字符在 str 中最后一次出现的位置 str.find_last_not_of(“apple”, 2) 返回除 apple 以外的任何一个字符在 str[0]~str[2] 范围中最后一次出现的位置
if(str.find("a")!= string::npos) //以上函数如果没有找到,均返回string::npos。
子串
成员方法 作用 str.substr(3) 返回 [3] 及以后的子串 str.substr(2, 4) 返回 str[2]~str[2+(4-1)] 子串(即从[2]开始4个字符组成的字符串)
替换
成员方法 作用 str.replace(2, 4, “sz”) 返回把 [2]~[2+(4-1)] 的内容替换为 “sz” 后的新字符串 str.replace(2, 4, “abcd”, 3) 返回把 [2]~[2+(4-1)] 的内容替换为 “abcd” 的前3个字符后的新字符串
插入
成员方法 作用 str.insert(2, “sz”) 从 [2] 位置开始添加字符串 “sz”,并返回形成的新字符串 str.insert(2, “abcd”, 3) 从 [2] 位置开始添加字符串 “abcd” 的前 3 个字符,并返回形成的新字符串 str.insert(2, “abcd”, 1, 3) 从 [2] 位置开始添加字符串 “abcd” 的前 [2]~[2+(3-1)] 个字符,并返回形成的新字符串
追加/删除/交换
成员方法 作用 str.push_back(‘a’) 在 str 末尾添加字符’a’ str.append(“abc”) 在 str 末尾添加字符串"abc" str.erase(3) 删除 [3] 及以后的字符,并返回新字符串 str.erase(3, 5) 删除从 [3] 开始的 5 个字符,并返回新字符串 str1.swap(str2) 把 str1 与 str2 交换
其他
成员方法 作用 str.size() 返回字符串长度 str.length() 返回字符串长度 str.empty() 检查 str 是否为空,为空返回 1,否则返回 0 str[n] 存取 str 第 n + 1 个字符 str.at(n) 存取 str 第 n + 1 个字符(如果溢出会抛出异常)
C++ string 字符串函数详解
二、【题】无重复字符的最长字串
模式识别1:涉及出现次数/是否出现过,需要用到散列表
模式识别2:涉及子串,考虑滑动窗口
滑动窗口的两个要素:记录左右窗口位置;确定滑动/持续滑动条件 一般形式为for循环中使用while(负责向右滑动)和if(负责向左滑动)
惊艳解法:利用字符的ASCII码存储每一个字符最近一次的出现位置
#include <iostream>
#include <string>
using namespace std;
int main ( ) {
string s = "abcabcbb" ;
int last[ 128 ] ;
for ( int i = 0 ; i < 128 ; i++ ) {
last[ i] = - 1 ;
}
int n = s. length ( ) ;
int res = 0 ;
int start = 0 ;
for ( int i = 0 ; i < n; i++ ) {
int index = s. at ( i) ;
start = max ( start, last[ index] + 1 ) ;
res = max ( res, i - start + 1 ) ;
last[ index] = i;
}
cout<< res;
return 0 ;
}
三、运算符重载
C++ 重载运算符和重载函数