p155 翻转单词顺序(leetcode 151)
一:解题思路
与之类似的题目,字符串反转。实例,"we;tonight;you" -> "ew;thginot;uoy",可以使用C++标准库中string类的实现来做。
string reverse(const string& s,const char c)
{
string ret="";
return ret;
}
int main()
{
cout<<reverse("",';')<<endl;//输出空字符串
cout<<reverse(";",';')<<endl;//输出 ;
cout<<reverse("abcde",';')<<endl; //输出edcba
return 0;
}
C++: Time:O(n) Space:O(1)
Java:Time:O(n) Space:O(n)
二:完整代码示例 (C++版和Java版)
C++:
C++和Java一样的代码,但是C++不能全部AC,这个有点不太理解,还是把代码贴出来了。
class Solution { private: void reverse(string& sc, int i, int j) { for (; i < j; i++, j--) { char temp = sc[i]; sc[i] = sc[j]; sc[j] = temp; } } public: string reverseWords(string s) { if (s.length() == 0) return s; int p = 0; int q = 0; int end = s.length() - 1; while (end >= 0 && s[end] == ' ') end--; while (q <= end) { int start = p; while (q <= end && s[q] == ' ') q++; while (q <= end && s[q] != ' ') s[p++] = s[q++]; reverse(s, start, p - 1); if (q <= end) s[p++] = ' '; } reverse(s, 0,p - 1); return s; } };
Java:
class Solution { private void reverse(char[] sc,int i,int j) { for(;i<j;i++,j--) { char temp=sc[i]; sc[i]=sc[j]; sc[j]=temp; } } public String reverseWords(String s) { if(s==null || s.length()==0) return s; char[] str=s.toCharArray(); int p=0; int q=0; int end=s.length()-1; while(end>=0 && s.charAt(end)==' ') end--; while(q<=end) { int start=p; while(q<=end && s.charAt(q)==' ') q++; while (q<=end && s.charAt(q)!=' ') str[p++]=str[q++]; reverse(str,start,p-1); if(q<=end) str[p++]=' '; } reverse(str,0,p-1); return new String(str,0,p); } }

浙公网安备 33010602011771号