文章目录
- 1. 两道题目
- 1. [387. 字符串中的第一个唯一字符 - 力扣(LeetCode)](https://leetcode.cn/problems/first-unique-character-in-a-string/description/)
- 2.[415. 字符串相加 - 力扣(LeetCode)](https://leetcode.cn/problems/add-strings/)
- 2. string增删查改相关接口
- 3.string相关题目
- 1.[字符串最后一个单词的长度_牛客题霸_牛客网](https://www.nowcoder.com/practice/8c949ea5f36f422594b306a2300315da?tpId=37&&tqId=21224&rp=5&ru=/activity/oj&qru=/ta/huawei/question-ranking)
1. 两道题目
1. 387. 字符串中的第一个唯一字符 - 力扣(LeetCode)
这道题可以直接进行比较,但是时间复杂度就比较高了
例如:
class Solution {
public:
int firstUniqChar(string s) {
int r = s.size();
for (int i = 0; i < r; i++) {
bool isUnique = true;
for (int j = 0; j < r; j++) {
if (i!= j && s[i] == s[j]) {
isUnique = false;
break;
}
}
if (isUnique) {
return i;
}
}
return -1;
}
};
我们这里可以用和计数排序一样的方法就可以解决
class Solution {
public:
int firstUniqChar(string s) {
// 统计每个字符出现的次数
int count[256] = {0};
int size = s.size();
for(int i = 0; i < size; ++i)
count[s[i]] += 1;
// 按照字符次序从前往后找只出现一次的字符
for(int i = 0; i < size; ++i)
if(1 == count[s[i]])
return i;
return -1;
}
};
2.415. 字符串相加 - 力扣(LeetCode)
to_string
可以将其他类型转换为字符串
就和我们进行加减计算时候,从后向前进行计算
class Solution {
public:
string addStrings(string num1, string num2) {
int end1 = num1.size() - 1, end2 = num2.size() - 1;
string str;
int next = 0;
while (end1 >= 0 || end2 >= 0) {
int val1 = end1 >= 0 ? num1[end1] - '0' : 0;
int val2 = end2 >= 0 ? num2[end2] - '0' : 0;
end1--, end2--;
// 如果走完了就将其补上0 ,否则就将其转换为数字
int ret = val1 + val2 + next;
next = ret / 10;
ret %= 10;
str.insert(str.begin(), '0' + ret);
}
if (next == 1) {
str.insert(str.begin(), '1');
}
return str;
}
};
2. string增删查改相关接口
string::push_back
用来插入字符string::append
用来插入字符串
当然也可以用+=
来实现一样的效果:
-
string::insert
任意位置插入字符串 -
string::erease
可以将任意位置的字符进行删除
尾部删除可以用迭代器版本,也可以间接删除:
string::replace
替换字符串中的字符
string::find
查找字符串string::rfind
从后向前进行查找
如果找到了就返回下标
没有找到返回的值是string::npos
string::strsub
可以将输入的第一个参数后面的内容进行拷贝,知道这个字符串的结束
string::find_first_of
返回要找输入的字符串中的所有字符(默认第一个数据为开始位置,第二个数据为结束位置,如果不输入就直接到结尾)
- 我们在写window是要加两个’ \ ',因为一个在C语言中表示的是转义字符
string::find_last_of
和first_of相反从后向前进行查找
使用方法如下:
3.string相关题目
1.字符串最后一个单词的长度_牛客题霸_牛客网
题目不难,但有个点需要注意:
#include <iostream>
#include <string>
using namespace std;
int findLastword(string str) {
size_t pos = str.rfind(" ");
return str.size() - (pos + 1);
}
int main() {
string str;
//cin>>str; 不能直接用cin,因为cin遇到空格就不再接受了,直接终止了
getline(cin,str); //getline第三个参数可以调成你想停止的符号,如果不输入就默认换行才停止
cout << findLastword(str) << endl;
}