字符串变形题解
字符串变形
http://www.nowcoder.com/practice/c3120c1c1bc44ad986259c0cf0f0b80e
- 第一步先翻转单词顺序,之前看到的有个巧妙的思路,先对整个字符串进行翻转,然后循 环对每个单词进行翻转,就达到了翻转单词顺序的效果,这个时间复杂度为:因为中间有个while循环,最多循环单词的最大长度,单词长度是常数级别的,所以时间复杂度为o(n)的,
- 第二步遍历字符串,将每个大写变成小写,小写变成大写,时间复杂度为o(n)的
class Transform {
public:
string trans(string s, int n) {
// write code here
if(n==0) return s;
reverse(s.begin(),s.end()); //翻转整个字符串
for (int i=0;i<n;i++){
int j=i;
while(j<n && s[j]!=' ') j++;
reverse(s.begin()+i,s.begin()+j); //翻转不是空格之外的单词
i=j;
}
string res;
for (int i=0;i<n;i++){
if (s[i]!=' ' && s[i]<='Z' && s[i]>='A') res+=s[i]-'A'+'a';
else if (s[i]!=' ' && s[i]>='a' && s[i]<='z') res+=s[i]-'a'+'A';
else res+=s[i];
}
return res;
}
};