3-3 训练专题(一)问题 A: 字母大小全排列

题目描述

给定一个字符串S,通过将字符串S中的每个字母转变大小写,我们可以获得一个新的字符串。输出所有可能的字符串的数量。

输入

测试样例由多组测试数据组成,每组测试数据第一行输入一个字符串s ( 1 <= s.length <= 12 )

输出

输出所有可能的字符串的数量

样例输入

q1b2

样例输出

4

思路:

从左往右跑,如果碰到字母就产生俩条分支。在这里插入图片描述

回溯AC代码:

#include<bits/stdc++.h>

using namespace std;
string str;
int ans;
void dfs(string str,int len){
	if(len==str.length()){  //如果取到的位置超出了最后一位,形成一个字符串 
		ans++;
		return;
	} 
	dfs(str,len+1);      	//进行左支输出
	 
	if(str[len]>='a'&&str[len]<='z'){ 	//右支的条件 
		str[len]-=32;
		dfs(str,len+1);
	}else if(str[len]>='A'&&str[len]<='Z'){
		str[len]+=32;
		dfs(str,len+1);
	}
}
int main(){
	while( cin >> str ){
		ans=0;
		dfs(str,0);
		cout<<ans<<endl;
	}
	
	return 0;
} 

简单法AC代码:

#include<bits/stdc++.h>

using namespace std;
string str;
int ans;
int main(){
	while( cin >> str ){
		ans=1;
		for(int i=0;i<str.length();i++){
			if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')){ 
				ans*=2;
			}
		}
		cout<<ans<<endl;
	}
	
	return 0;
} 
发布了34 篇原创文章 · 获赞 6 · 访问量 1355

猜你喜欢

转载自blog.csdn.net/qq_44669377/article/details/104634875
3-3