ccf练习题 字符串反转3

本文解析如何实现将输入字符串中每个单词进行反转,同时给出了一段可能超时的C++代码示例,并探讨了优化策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符串反转3
【问题描述】

   给出一个字符串,请将其每个单词反转后输出。

【输入形式】

  输入第一行为一个正整数N,表示测试用例数,接下来的N行,每行一个字符串。

【输出形式】

  输出N行,每行对应一个反转后的字符串。

【样例输入】

3
olleh !dlrow
m’I morf .unh
I ekil .tae
【样例输出】

hello world!
I’m from hnu.
I like eat.

#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main(){
	int n;
	cin>>n;
	getchar();
	for(int i=0;i<n;i++){
		string s,str;
		getline(cin,s);
		str=s;
		for(int j=s.length()-1;j>=0;j--)
		str[s.length()-1-j]=s[j];
		stack<string> sen;
		int j0=0;
		for(int j=0;j<str.length();j++){
			if(str[j]==' '){
				sen.push(str.substr(j0,j-j0));
				j0=j+1;
			}
			if(j==str.length()-1){
				sen.push(str.substr(j0,100));
			}
		}
		while(!sen.empty()){
			cout<<sen.top();
			sen.pop();
			cout<<" ";
		}
		cout<<endl;
	}
	return 0;
}

有一个样例有的时候会超时,多交几次这个样例又会出现不超时的情况;
目前还没搞明白哪里出了问题。

### CCF CSP 字符串变换题目解析 对于给定的初始字符串 `s` 和多个查询,每次查询包含一个正整数 `k`,目标是对初始字符串 `s` 变换 `k` 次后的结果 `F_k(s)` 进行计算。输入格式应按照指定方式处理,特别是当字符串中存在空格时,建议采用逐行读取的方法来避免跳过这些空格字符[^2]。 #### 解决方案概述 一种有效的解决方案涉及识别并利用字符转换过程中的循环模式。如果发现某个子序列形成了闭合环路,则可以记录该环路上所有可能的状态及其长度(即周期),从而简化后续多次应用相同操作的情况下的计算复杂度。具体来说: - 对于每一个不同的起始字符,构建映射表以追踪其变化路径直至形成闭环; - 记录下每条路径上的节点以及对应的周期大小; - 当面对特定次数的转换求时,通过求余运算快速定位最终状态而无需重复执行完整的转换流程。 #### 实现细节 下面是一个基于上述思路实现的例子,在此例子中使用 Python 编程语言完成整个逻辑链条的设计与编码工作: ```python def transform_string(s, transformations, queries): from collections import defaultdict # 构建字典用于存储每个字母的变化链 change_map = {} for start_char, end_char in zip(transformations[:-1], transformations[1:]): if start_char not in change_map: change_map[start_char] = [] change_map[start_char].append(end_char) result = [] for k in queries: transformed_s = "" for char in s: current_char = char # 如果当前字符存在于变更列表里则查找对应位置的新字符 if char in change_map and len(change_map[char]) != 0: cycle_length = len(change_map[char]) index_within_cycle = (change_map[char].index(char) + k % cycle_length) % cycle_length new_char = change_map[char][index_within_cycle] current_char = new_char transformed_s += current_char result.append(transformed_s) return result # 测试用例 print(transform_string("abc", ["a","b","c"], [1])) ``` 这段代码实现了对字符串进行一系列预定义转换的功能,并能够高效地响应不同数量级的转换需求。注意这里为了简单展示原理只考虑了单向线性的转换关系;实际竞赛题目的条件可能会更加复杂一些,比如双向或多分支的转换规则等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值