原地翻转句子中单词的顺序,但单词内字符的顺序不变。要求:空间复杂度O(1),时间复杂度O(n)。
//参考《剑指offter》第48题,翻转字符串 //时间复杂度O(n),空间复杂度O(1) #include<iostream> (720)#include<string> using namespace std; void Reverse(string &s, int left, int right) { if (s.empty()) return; while (left<right) { char temp = s[left]; s[left] = s[right]; s[right] = temp; left++, right--; } } void ReverseSentence(string &s) { if (s.empty()) return; int left = 0, right = s.size() - 1; //反转整个句子 Reverse(s, left, right); //翻转句子中的每个单词 left = right = 0; while (left<s.size()) { if (s[left] == ' ') { left++; right++; } else if (s[right] == ' ' || right == s.size()) { Reverse(s, left, --right); left = ++right; } else { right++; } } } int main() { string s; getline(cin, s); ReverseSentence(s); cout << s; }
import java.util.Scanner; public class Main { public static String reserve(String str){ String[] ss = str.split(" "); StringBuffer s = new StringBuffer(""); for(int i = ss.length-1; i>=0;i--){ s.append(ss[i]+" "); } return s.toString(); } public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); String reserve = reserve(str); System.out.println(reserve); } }
import java.util.*; public class EnglishWords { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); String[] strs = str.split(" "); for(int i=strs.length-1;i>0;i--) { System.out.print(strs[i]+" "); } System.out.println(strs[0]); } }
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; /* 原地翻转句子中单词的顺序,但单词内字符的顺序不变。要求:空间复杂度O(1),时间复杂度O(n)。 I am a student. */ public class Main { public static void main(String[] args) throws IOException { BufferedReader br=new BufferedReader(new InputStreamReader(System.in)); String[] s=br.readLine().split(" "); for(int i=s.length-1;i>=0;i--){ System.out.print(s[i]+" "); } } }
import java.util.*; public class Main { // 将字符串转为 charArray public static void main(String args[]) { Scanner in = new Scanner(System.in); String[] arr = in.nextLine().split(" "); String res = ""; for(int i = arr.length-1; i >=0 ; i--) { res += arr[i]; if(i != 0) { res += " "; } } System.out.println(res); } }
#include<bits/stdc++.h> using namespace std; int main() { string s; while(getline(cin,s)) { int st=s.size()-1; string ans; while(st>=0) { int pos=s.rfind(' ',st); if(pos==string::npos) { ans+=s.substr(pos+1,st-pos); break; } else { ans+=s.substr(pos+1,st-pos); ans+=" "; st=pos-1; } } cout<<ans<<endl; } return 0; }再来个原地调整顺序的吧!参考于剑指offer
#include<bits/stdc++.h> using namespace std; void reverseStr(string &s,int l,int r) { while(l<r) { swap(s[l],s[r]); l++,r--; } } int main() { string s; while(getline(cin,s)) { int l=0,r=s.size()-1; reverseStr(s,0,r); int i=0,j=0; while(j<=s.size()) { if(j<s.size() && s[j]!=' ') j++; else if(j==s.size() || s[j]==' ') { reverseStr(s,i,j-1); i=j+1; j++; } } cout<<s<<endl; } return 0; }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner input = new Scanner(System.in); String str = input.nextLine(); String[] x = str.split(" "); for(int i = x.length;i>1;i--){ System.out.print(x[i-1]+" "); } System.out.println(x[0]); } }split万岁!
import java.util.Scanner; public class Main{ public static void main(String[] args){ Scanner s = new Scanner(System.in); String[] str = s.nextLine().split(" "); for(int i =0;i <str.length/2;i++){ String temp = str[i]; str[i]=str[str.length-i-1]; str[str.length-i-1]=temp; } for(int i =0;i <str.length;i++){ System.out.print(str[i]+" "); } } }
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String s = sc.nextLine(); System.out.println(reverseSetence(s)); } public static String reverseSetence(String s){ if(s.length() <= 1) return s; char[] chars = s.toCharArray(); int index = 0; for (int i = 0; i < chars.length; i++){ if(chars[i] == ' '){ reverse(chars,index,i - 1); index = i + 1; } if(i == chars.length - 1) reverse(chars,index,chars.length - 1); } reverse(chars,0,chars.length - 1); return new String(chars); } // 翻转单个单词 public static void reverse(char[] chars, int low, int high){ while(low < high){ char temp = chars[low]; chars[low] = chars[high]; chars[high] = temp; ++low; --high; } } }
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); StringBuilder input = new StringBuilder(scanner.nextLine()); input = input.reverse().append(" "); int start = 0; for (int i = 0; i < input.length(); i++) { if (input.charAt(i) == ' ') { for (int j = start, k = 0; k < (i - j) / 2; k++) { char c = input.charAt(j + k); input.setCharAt(j + k, input.charAt(i - k - 1)); input.setCharAt(i - k - 1, c); } start = i + 1; } } System.out.println(input.toString()); } }
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();
// System.out.println(str);
String[] array=str.split(" ");
/* for (String c:array){
System.out.println(c);
}*/
for (int i = array.length-1; i >=0; i--) {
System.out.print(array[i]+" ");
}
}
}