原题:
思路:先将S放到数组里,循环遍历S的每个字符,当字符为字母的时候,遍历数组,将字符位转变成(这个字符原大写改为小写,小写改为大写)然后存入数组中。
“这里为什么要遍历数组”想了很久,贴图:
例如:使数组第一个元素第一个字母变为大写,遍历“a1b2c3”变为“A1b2c3”
使数组第一,二个元素第二个字母变为大写,遍历“a1b2c3”“A1b2c3”变为"a1B2c3","A1B2c3"
使数组第一,二,三,四个元素第三个字母变为大写"a1b2c3","A1b2c3","a1B2c3","A1B2c3"变为"a1b2C3","A1b2C3","a1B2C3","A1B2C3"
class Solution {
public:
char switchChar(char c){
if(c>='a'&&c<='z')
{
return toupper(c);
}
else if (c>='A'&&c<='Z')
{
return tolower(c);
}
return ' '; //注意这里一定要返回一个字符,否则在Leetcode编译会发生错误
}
vector<string> letterCasePermutation(string S) {
vector<string>result;
result.push_back(S);
int length=S.size();
for(int i=0;i<length;i++)
{
if(isalpha(S[i]))
{
//这里要先计算数组元素个数,在循环里面不可以写j<result.size();容器里的元素一直在增加,
//是无穷无尽的,编译发生错误
int size=result.size();
for(int j=0;j<size;j++) //遍历数组每一个元素
{
string sl=result[j];
sl[i]=switchChar(sl[i]);
result.push_back(sl);
}
}
}
return result;
}
};