解题思路
这是一道字符串处理问题,主要思路如下:
-
问题分析:
- 输入一个包含数字、字母和特殊字符的优惠券码
- 需要提取其中的有效字符(字母和特定特殊字符)
- 有效字符包括:
- 大小写字母(a-z, A-Z)
- 特殊字符:[、]、^、_、'、\
-
解决方案:
- 遍历字符串的每个字符
- 判断字符是否为有效字符
- 保留有效字符,去除数字
- 最后添加^作为结尾
-
实现细节:
- 使用字符串存储结果
- 使用条件判断筛选字符
- 保持字符的原有顺序
代码
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
string ret;
// 遍历输入字符串
for(int i = 0; i < s.size(); i++) {
// 判断是否为有效字符
if((s[i] >= 'a' && s[i] <= 'z') || // 小写字母
(s[i] >= 'A' && s[i] <= 'Z') || // 大写字母
s[i] == '[' || s[i] == ']' || // 特殊字符
s[i] == '^' || s[i] == '_' ||
s[i] == '\'' || s[i] == '\\') {
ret.push_back(s[i]);
}
}
// 添加结尾的^
cout << ret + "^" << endl;
return 0;
}
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
StringBuilder ret = new StringBuilder();
// 遍历输入字符串
for(int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
// 判断是否为有效字符
if((c >= 'a' && c <= 'z') || // 小写字母
(c >= 'A' && c <= 'Z') || // 大写字母
c == '[' || c == ']' || // 特殊字符
c == '^' || c == '_' ||
c == '\'' || c == '\\') {
ret.append(c);
}
}
// 添加结尾的^
System.out.println(ret.toString() + "^");
sc.close();
}
}
def extract_coupon_code(s: str) -> str:
ret = ""
# 遍历输入字符串
for c in s:
# 判断是否为有效字符
if (c.isalpha() or # 字母
c in ['[', ']', '^', '_', "'", '\\']): # 特殊字符
ret += c
# 添加结尾的^
return ret + "^"
def main():
s = input().strip()
print(extract_coupon_code(s))
if __name__ == "__main__":
main()
算法及复杂度
- 算法:字符串遍历
- 时间复杂度:
-
为输入字符串长度
- 空间复杂度:
- 需要存储结果字符串