寒假冬令营(算法编程)1月12日(字符串)

文章讲述了在LeetCode平台上遇到的两个编程问题,一是检查两个字符串数组是否表示相同的字符串,二是计算给定句子中单词的最大数量。展示了用Java、C、C++和Python实现的解决方案。
摘要由CSDN通过智能技术生成

题目描述(1)

1662. 检查两个字符串数组是否相等

. - 力扣(LeetCode)

给你两个字符串数组 word1word2 。如果两个数组表示的字符串相同,返回 true ;否则,返回 false

数组表示的字符串 是由数组中的所有元素 按顺序 连接形成的字符串。

示例 1:

输入:word1 = ["ab", "c"], word2 = ["a", "bc"]
输出:true
解释:
word1 表示的字符串为 "ab" + "c" -> "abc"
word2 表示的字符串为 "a" + "bc" -> "abc"
两个字符串相同,返回 true

示例 2:

输入:word1 = ["a", "cb"], word2 = ["ab", "c"]
输出:false

示例 3:

输入:word1  = ["abc", "d", "defg"], word2 = ["abcddefg"]
输出:true

提示:

  • 1 <= word1.length, word2.length <= 103

  • 1 <= word1[i].length, word2[i].length <= 103

  • 1 <= sum(word1[i].length), sum(word2[i].length) <= 103

  • word1[i]word2[i] 由小写字母组成

解题结果

Java

class Solution {
    // 定义一个方法,用于检查两个字符串数组是否表示相同的字符串
    public boolean arrayStringsAreEqual(String[] word1, String[] word2) {
        // 创建两个 StringBuilder 对象,用于拼接字符串
        StringBuilder sb1 = new StringBuilder();
        StringBuilder sb2 = new StringBuilder();
​
        // 遍历第一个字符串数组 word1,将每个字符串拼接到 sb1 中
        for (String str : word1) {
            sb1.append(str);
        }
​
        // 遍历第二个字符串数组 word2,将每个字符串拼接到 sb2 中
        for (String str : word2) {
            sb2.append(str);
        }
​
        // 比较两个拼接后的字符串是否相等,返回比较结果
        return sb1.toString().equals(sb2.toString());
    }
}

C语言

// 函数:检查两个字符串数组是否表示相同的字符串
bool arrayStringsAreEqual(char **word1, int word1Size, char **word2, int word2Size) {
​
    // 若两个字符串数组均为空,则认为它们相等
    if (word1Size == 0 && word2Size == 0) {
        return true;
    }
​
    // 定义临时字符数组,用于存储拼接后的字符串
    char temp[10000] = "";
    char temp2[10000] = "";
​
    // 遍历第一个字符串数组 word1,将每个字符串拼接到 temp 中
    for (int i = 0; i < word1Size; i++) {
        strcat(temp, word1[i]);
    }
​
    // 遍历第二个字符串数组 word2,将每个字符串拼接到 temp2 中
    for (int i = 0; i < word2Size; i++) {
        strcat(temp2, word2[i]);
    }
​
    // 使用 strcmp 函数比较两个拼接后的字符串是否相等
    if (strcmp(temp, temp2) == 0) {
        return true;
    }
​
    // 如果两个字符串不相等,返回 false
    return false;
}

C++

class Solution {
public:
    bool arrayStringsAreEqual(vector<string>& word1, vector<string>& word2) {
        string str1, str2;
        for (auto& str : word1) str1 += str;
        for (auto& str : word2) str2 += str;
        return str1 == str2;
    }
};

Python

class Solution:
    def arrayStringsAreEqual(self, word1: List[str], word2: List[str]) -> bool:
        return ''.join(word1) == ''.join(word2)

题目描述(2)

2114. 句子中的最多单词数

. - 力扣(LeetCode)

一个 句子 由一些 单词 以及它们之间的单个空格组成,句子的开头和结尾不会有多余空格。

给你一个字符串数组 sentences ,其中 sentences[i] 表示单个 句子

请你返回单个句子里 单词的最多数目

示例 1:

输入:sentences = ["alice and bob love leetcode", "i think so too", "this is great thanks very much"]
输出:6
解释:
- 第一个句子 "alice and bob love leetcode" 总共有 5 个单词。
- 第二个句子 "i think so too" 总共有 4 个单词。
- 第三个句子 "this is great thanks very much" 总共有 6 个单词。
所以,单个句子中有最多单词数的是第三个句子,总共有 6 个单词。

示例 2:

输入:sentences = ["please wait", "continue to fight", "continue to win"]
输出:3
解释:可能有多个句子有相同单词数。
这个例子中,第二个句子和第三个句子(加粗斜体)有相同数目的单词数。

提示:

  • 1 <= sentences.length <= 100

  • 1 <= sentences[i].length <= 100

  • sentences[i] 只包含小写英文字母和 ' '

  • sentences[i] 的开头和结尾都没有空格。

  • sentences[i] 中所有单词由单个空格隔开。

解题结果

Java

class Solution {
    // 方法:计算句子中单词的最大数量
    public int mostWordsFound(String[] sentences) {
        // 初始化最大单词数量为 0
        int maxWords = 0;
​
        // 遍历每个句子
        for (String sentence : sentences) {
            // 初始化当前句子的单词数量为 1(假设每个句子至少有一个单词)
            int words = 1;
​
            // 获取当前句子的长度
            int length = sentence.length();
​
            // 遍历句子中的每个字符
            for (int i = 0; i < length; i++) {
                // 如果当前字符是空格,增加单词数量
                if (sentence.charAt(i) == ' ') {
                    words++;
                }
            }
​
            // 更新最大单词数量
            maxWords = Math.max(maxWords, words);
        }
​
        // 返回最大单词数量
        return maxWords;
    }
}

C语言

// 函数:计算句子中单词的最大数量
int mostWordsFound(char **sentences, int sentencesSize) {
    int wordsNum = 1;  // 初始化单词数量为1,假设每个句子至少有一个单词
    int max = 1;       // 初始化最大单词数量为1
​
    // 遍历每个句子
    for (int i = 0; i < sentencesSize; i++) {
        wordsNum = 1;  // 重置单词数量为1
​
        // 遍历句子中的每个字符
        for (int j = 0; j < strlen(sentences[i]); j++) {
            // 如果当前字符是空格,增加单词数量
            if (sentences[i][j] == ' ') {
                wordsNum++;
            }
        }
​
        // 更新最大单词数量
        if (wordsNum > max) {
            max = wordsNum;
        }
    }
​
    // 返回最大单词数量
    return max;
}

C++

class Solution {
public:
    int mostWordsFound(vector<string>& sentences) {
        int res = 0;
        for (const string& sentence: sentences) {
            // 单词数 = 空格数 + 1
            int cnt = count(sentence.begin(), sentence.end(), ' ') + 1;
            res = max(res, cnt);
        }
        return res;
    }
};

Python

class Solution:
    def mostWordsFound(self, sentences: List[str]) -> int:
        res = 0
        for sentence in sentences:
            #  单词数 = 空格数 + 1
            cnt = sentence.count(' ') + 1
            res = max(res, cnt)
        return res

  • 17
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pedestrians74

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值