系列文章目录
第1章 求和
第2章 回文
第3章 字符串数组
文章目录
一、题目
给你一个下标从 0 开始的数组 words
,数组中包含 互不相同 的字符串。
如果字符串 words[i]
与字符串 words[j]
满足以下条件,我们称它们可以匹配:
- 字符串
words[i]
等于words[j]
的反转字符串。 `0 <= i < j < words.length`
请你返回数组 words
中的 最大 匹配数目。
注意,`每个字符串最多匹配一次`。
示例 1:
输入:words = ["cd","ac","dc","ca","zz"] 输出:2 解释:在此示例中,我们可以通过以下方式匹配 2 对字符串: - 我们将第 0 个字符串与第 2 个字符串匹配,因为 word[0] 的反转字符串是 "dc" 并且等于 words[2]。 - 我们将第 1 个字符串与第 3 个字符串匹配,因为 word[1] 的反转字符串是 "ca" 并且等于 words[3]。 可以证明最多匹配数目是 2 。
示例 2:
输入:words = ["ab","ba","cc"] 输出:1 解释:在此示例中,我们可以通过以下方式匹配 1 对字符串: - 我们将第 0 个字符串与第 1 个字符串匹配,因为 words[1] 的反转字符串 "ab" 与 words[0] 相等。 可以证明最多匹配数目是 1 。
示例 3:
输入:words = ["aa","ab"] 输出:0 解释:这个例子中,无法匹配任何字符串。
提示:
1 <= words.length <= 50
words[i].length == 2
words
包含的字符串互不相同。words[i]
只包含小写英文字母。
(Leetcode编号:2744)
二、知识点
1.字符串数组(每个元素都是一个字符指针,指向一个以null结尾的字符序列(即字符串))
三、解题步骤
1.思路
1.由字符指针指向每个字符串中的字符
eg:
words = ["ab","ba","cc"]
word[0][0],即:"ab" 中的 "a"
2.遍历
2.实现
class Solution {
public:
int maximumNumberOfStringPairs(vector<string>& words) {
int n = words.size();
int ans = 0;
for(int i = 0;i < n;++i){
for(int j = i + 1;j < n;++j){
if(words[i][0] == words[j][1] && words[i][1] == words[j][0])
//[0],[1]是用于访问第i or j的下标
++ans;
}
}
return ans;
}
};
3.其他
1.字符串数组(每个元素都是一个字符指针,指向一个以null结尾的字符序列(即字符串))
C++和C语言中的字符串数组:
相同之处:
1. 都是使用字符数组来表示字符串。
2. 都可以使用指针或索引访问字符串中的字符。
3. 都可以使用循环遍历字符串中的字符。
4. 都可以使用标准库函数处理字符串,如strlen、strcpy等。
不同之处:
1. C++中的字符串数组可以使用string类来表示,
C语言中只能使用字符数组。
2. C++中的string类提供了更多的成员函数和方法,如substr、find、replace等,方便进行字符串操作。
3. C++中的string类会自动管理内存,不需要手动分配和释放内存。
在C语言中,需要手动分配和释放字符数组的内存。
4. C++中的string类支持字面量赋值,可以直接用双引号初始化字符串。
在C语言中,需要使用字符数组并逐个赋值。
5. C++中的string类支持自动类型转换,可以直接与其他数据类型进行运算。
在C语言中,需要进行显式的类型转换。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了Leetcode编号:2744的解题步骤和字符串数组。