3079:Vowel Counting

Problem Description
The "Vowel-Counting-Word"(VCW), complies with the following conditions.
Each vowel in the word must be uppercase. 
Each consonant (the letters except the vowels) must be lowercase.
For example, "ApplE" is the VCW of "aPPle", "jUhUA" is the VCW of "Juhua".
Give you some words; your task is to get the "Vowel-Counting-Word" of each word.
 
Input
The first line of the input contains an integer T (T<=20) which means the number of test cases.
For each case, there is a line contains the word (only contains uppercase and lowercase). The length of the word is not greater than 50.
 
Output
For each case, output its Vowel-Counting-Word.
 
Sample Input
4
XYz
application
qwcvb
aeioOa 
 
Sample Output
xyz
ApplIcAtIOn
qwcvb
AEIOOA
 

分析:

将字符串当成数组,以数组形式读取字符串中单个元素。

代码如下:

#include <iostream>
#include <string>
using namespace std;

int main()
{
	int T;
	cin >> T;
	while (T--)
	{
		string str;
		cin >> str;
		for (int i = 0;i < str.length();i++)
		{
			if (str[i] == 'a' || str[i] == 'e' || str[i] == 'i' || str[i] == 'o' || str[i] == 'u')
				str[i] -= 32;
			if (str[i] >= 'A'  && str[i] <= 'Z' && str[i] != 'A' && str[i] != 'E' && str[i] != 'I' && str[i] != 'O' && str[i] != 'U')
				str[i] += 32;
		}
		cout << str << endl;
	}

	return 0;
}


以下是对用于计算字符串中长度为`k`的子串中元音字母最大数量的 Python 代码的详细解释: ```python class Solution(object): def maxVowels(self, s, k): # 初始化左右指针,用于滑动窗口 left, right = 0, 0 # 获取字符串的长度 n = len(s) # 定义元音字母字符串 yuan = "aeiou" # 初始化最大元音字母数量 ans = 0 # 初始化最终结果 res = 0 # 右指针从 0 开始遍历字符串 while right < n: # 当窗口大小达到 k 时,开始滑动窗口 while k <= 0: # 更新最大元音字母数量 res = max(ans, res) # 如果左指针指向的字符是元音字母,元音字母数量减 1 if s[left] in yuan: ans -= 1 # 左指针右移一位 left += 1 # 窗口大小加 1 k += 1 # 如果右指针指向的字符是元音字母,元音字母数量加 1 if s[right] in yuan: ans += 1 # 右指针右移一位 right += 1 # 窗口大小减 1 k -= 1 # 返回最大元音字母数量 return max(res, ans) ``` ### 代码解释: 1. **初始化部分**: - `left, right = 0, 0`:初始化左右指针,用于控制滑动窗口的范围。 - `n = len(s)`:获取字符串的长度。 - `yuan = "aeiou"`:定义元音字母字符串,用于判断字符是否为元音字母。 - `ans = 0`:用于记录当前窗口内元音字母的数量。 - `res = 0`:用于记录所有窗口中元音字母的最大数量。 2. **滑动窗口部分**: - `while right < n`:右指针从 0 开始遍历字符串,直到遍历完整个字符串。 - `while k <= 0`:当窗口大小达到`k`时,开始滑动窗口。 - `res = max(ans, res)`:更新最大元音字母数量。 - `if s[left] in yuan`:如果左指针指向的字符是元音字母,元音字母数量减 1。 - `left += 1`:左指针右移一位。 - `k += 1`:窗口大小加 1。 - `if s[right] in yuan`:如果右指针指向的字符是元音字母,元音字母数量加 1。 - `right += 1`:右指针右移一位。 - `k -= 1`:窗口大小减 1。 3. **返回结果**: - `return max(res, ans)`:返回所有窗口中元音字母的最大数量。 ### 复杂度分析: - **时间复杂度**:$O(n)$,其中`n`是字符串的长度。左右指针最多各遍历一次字符串。 - **空间复杂度**:$O(1)$,只使用了常数级的额外空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值