对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
数据范围:字符串长度满足
对字符串中的所有单词进行倒排。
说明:
1、构成单词的字符只有26个大写或小写英文字母;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
输入一行,表示用来倒排的句子
输出句子的倒排结果
I am a student
student a am I
$bo*y gi!r#l
l r gi y bo
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); System.out.print(reverseWords(str)); } public static String reverseWords(String str) { String s = str.replaceAll("[^a-zA-Z0-9]"," "); // 使用空格分割句子成单词数组 String[] words = s.split(" "); // 创建一个StringBuilder用于构建逆序后的句子 StringBuilder sb = new StringBuilder(); // 逆序遍历单词数组 for (int i = words.length - 1; i >= 0; i--) { // 将单词添加到StringBuilder sb.append(words[i]); // 如果不是最后一个单词,添加一个空格 if (i > 0) { sb.append(" "); } } // 返回逆序后的句子 return sb.toString(); } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { String word = scanner.nextLine(); String str = ""; //特殊字符变为空格 for (int i = 0; i < word.length(); i++) { char ch = word.charAt(i); if ((ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z')) { str += ch; } else { str += " "; } } String words[] = str.split(" "); String reverseWord = ""; //倒置数据 for (int i = 0; i < words.length; i++) { reverseWord += words[words.length - i - 1] + " "; } String reverseWords[] = reverseWord.split(" "); String finalString = ""; for (int i = 0; i < reverseWords.length; i++) { finalString += reverseWords[i] + " "; } // 将多余空格置换为一个空格 finalString = finalString.replaceAll("\\s+", " "); System.out.println(finalString.trim()); } scanner.close(); } }
import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); str = str.replaceAll("[^a-zA-Z]+"," "); List<String> list = new ArrayList<>(); list = Arrays.asList(str.split(" ")); Collections.reverse(list); String strResult = String.join(" ",list); System.out.println(strResult); } }
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); List<String> list = new ArrayList<>(); String strTemp = new String(); for(int i = 0;i<str.length();i++){ char c = str.charAt(i); if(c <= 'z' && c>='a'){ strTemp += c; }else if(c <='Z' && c>='A'){ strTemp += c; }else{ if(strTemp != null && strTemp.length()>0){ list.add(strTemp); } strTemp = ""; } } list.add(strTemp); Collections.reverse(list); String strResult = String.join(" ",list); System.out.println(strResult); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String inString = in.nextLine(); List<String> arr = new ArrayList<>(); String s = ""; for (int i = 0 ; i < inString.length() ; i++) { if (Character.isLetter(inString.charAt(i))) { s += inString.charAt(i); //对最后一个单词单独添加 if (!"".equals(s) && i == inString.length() - 1) { arr.add(s); } } else { if (!"".equals(s)) { arr.add(s); } s = ""; } } //倒排 Collections.reverse(arr); String res = ""; for (String part : arr) { res += part + " "; } System.out.println(res); } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 String str = in.nextLine(); int right = str.length() - 1; int left = right; StringBuffer res = new StringBuffer(); while (right>=0) { while (left >= 0 && Character.isLetter(str.charAt(left))) { left--; } res.append(str.substring(left + 1, right + 1)); if(left != 0){ res.append(" "); } while(left>=0 && !Character.isLetter(str.charAt(left))){ left--; } right = left; } System.out.println(res.toString()); } }使用双指针解决,和H13句子逆序相同,一并解决
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str = in.nextLine(); String[] strs = str.split("[^a-zA-Z]"); for (int i = strs.length-1; i >= 0; i--) { System.out.print(strs[i]+" "); } } }
import java.util.Scanner; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String str=in.nextLine(); int index=str.length()-1; for(int i=index;i>=0;i--){ if(!((str.charAt(i)>='A'&&str.charAt(i)<='Z')|| (str.charAt(i)>='a'&&str.charAt(i)<='z'))){ for(int j=i+1;j<str.length();j++){ if((str.charAt(j)>='A'&&str.charAt(j)<='Z')|| (str.charAt(j)>='a'&&str.charAt(j)<='z')){ if(j==str.length()-1){ System.out.print(str.charAt(j)+" "); }else { System.out.print(str.charAt(j)); } }else { System.out.print(" "); break; } } }else if(((str.charAt(i)>='A'&&str.charAt(i)<='Z')|| (str.charAt(i)>='a'&&str.charAt(i)<='z'))&&i==0){ for(int j=0;j<str.length();j++){ if((str.charAt(j)>='A'&&str.charAt(j)<='Z')|| (str.charAt(j)>='a'&&str.charAt(j)<='z')){ System.out.print(str.charAt(j)); }else { break; } } } } } }
import java.util.Scanner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); System.out.println(reverse1(line)); } /** * 字符串单词反转 * * @param line */ private static String reverse1(String line) { StringBuilder result = new StringBuilder(); StringBuilder sb = new StringBuilder(); for (int i = line.length() -1; i >= 0; i--) { char c = line.charAt(i); if (Character.isLetter(c)){ sb.append(c); }else { result.append(sb.reverse()); result.append(" "); sb.delete(0, sb.length()); } } result.append(sb.reverse()); return result.toString(); } }
import java.util.*; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的区别 while (in.hasNextLine()) { // 注意 while 处理多个 case String str = in.nextLine(); // System.out.println(str); ArrayList<String> list = getStrArr(str); // System.out.println(list); int n = list.size(); for(int i = n-1;i>-1;i--){ if(i==0){ System.out.print(list.get(i)); } else { System.out.print(list.get(i)+" "); } } } } public static ArrayList<String> getStrArr(String input) { ArrayList<String> wordList = new ArrayList<String>(); int n = input.length(); String tempStr = ""; for (int i = 0; i < n; i++) { char tempChar = input.charAt(i); // System.out.println(tempChar); if ((tempChar >= 'A' && tempChar <= 'Z') || (tempChar >= 'a' && tempChar <= 'z')) { tempStr = tempStr + tempChar; if (i == n - 1) { wordList.add(tempStr); } } else { if (!tempStr.equals("")) { wordList.add(tempStr); // System.out.println(tempStr); tempStr = ""; continue; } else { continue; } } } return wordList; } }
import java.util.Scanner; import java.util.LinkedList; // 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); String line = in.nextLine(); in.close(); //最初概要思路: //遇到一个字符 //1,是大小写字母 // 前一个不是特殊字符,拼接 // 前一个是特殊字符,创建 //2,是特殊字符 // 前一个不是特殊字符,存字符入数组 // 前一个是特殊字符,跳过 /* 编码思路 用双指针,index ,left , right 开始时 left==right ,notLetter=true 遇到字母 right++ 遇到特殊字符 if(right >= left && !notLetter) 截取, 再遇到字母,left=right=index,notLetter=false 到末尾,再判断一次 if(right >= left && !notLetter) 截取 */ int index=0 ,left=0 , right = 0; boolean notLetter = true; LinkedList<String> lsList = new LinkedList<>(); char[] charArray = line.toCharArray(); while (index < charArray.length) { if (Character.isLetter(charArray[index])) { right = notLetter ? index : right +1; if (notLetter) { left = index; notLetter = false; } }else { if(right >= left && !notLetter){ lsList.push(String.copyValueOf(charArray,left,right-left+1)); } notLetter = true; } index++; } if(right >= left && !notLetter){ lsList.push(String.copyValueOf(charArray,left,right-left+1)); } while (!lsList.isEmpty()) { System.out.print(lsList.pop()); if (lsList.size() > 0) { System.out.print(" "); } } } }