题目链接

题目描述

给定 个只包含小写字母的字符串。任务是将所有长度为奇数的字符串,按照它们在输入中出现的顺序,拼接起来并输出。

解题思路

这是一个基础的字符串处理问题。解题思路非常直接,我们只需要遍历所有输入的字符串,判断它们的长度,然后将符合条件的字符串追加到一个结果字符串中。

算法步骤

  1. 读入整数 ,表示接下来有 个字符串。
  2. 创建一个可变的字符串(例如 C++ 的 string、Java 的 StringBuilder 或 Python 的列表)来存储最终结果。
  3. 使用一个循环,从 1 到 重复 次。
  4. 在循环的每一次迭代中,读入一个字符串。
  5. 获取该字符串的长度。
  6. 使用取模运算符 % 判断字符串的长度是奇数还是偶数。如果 length % 2 == 1,则说明长度为奇数。
  7. 如果长度为奇数,就将这个字符串拼接到结果字符串的末尾。
  8. 循环结束后,输出最终拼接好的结果字符串。

性能考虑

由于所有输入字符串的总长度不超过 ,使用 StringBuilder (Java) 或类似的高效字符串拼接方式是很重要的,以避免在循环中因创建大量临时字符串对象而导致的性能下降(这在 C++ 和 Java 中尤其需要注意)。Python 的字符串拼接(通过列表 join)通常是高效的。

代码

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n;
    cin >> n;

    string result = "";
    for (int i = 0; i < n; ++i) {
        string s;
        cin >> s;
        if (s.length() % 2 != 0) {
            result += s;
        }
    }

    cout << result << endl;

    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        StringBuilder result = new StringBuilder();
        for (int i = 0; i < n; i++) {
            String s = sc.next();
            if (s.length() % 2 != 0) {
                result.append(s);
            }
        }
        
        System.out.println(result.toString());
    }
}
import sys

def solve():
    n = int(sys.stdin.readline())
    
    result_parts = []
    for _ in range(n):
        s = sys.stdin.readline().strip()
        if len(s) % 2 != 0:
            result_parts.append(s)
            
    print("".join(result_parts))

solve()

算法及复杂度

  • 算法:模拟
  • 时间复杂度,其中 是所有输入字符串的总长度。我们需要遍历所有字符串来检查它们的长度并进行拼接。
  • 空间复杂度,在最坏的情况下(所有字符串长度都是奇数),我们需要存储所有字符串来构成最终的答案。