字符串变形题解
字符串变形
http://www.nowcoder.com/questionTerminal/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; } };