Schwertfinger – Spalte „Wortreihenfolge umkehren“ – String[]/StringBuilder

Themenbeschreibung

Geben Sie einen englischen Satz ein, kehren Sie die Reihenfolge der Wörter im Satz um, behalten Sie aber die Reihenfolge der Zeichen innerhalb des Wortes bei. Der Einfachheit halber werden Satzzeichen wie normale Buchstaben behandelt. Geben Sie beispielsweise die Zeichenfolge „Ich bin Student.“ ein und geben Sie dann „Student. a bin ich“ aus.

Eingabe: „Der Himmel ist blau“
Ausgabe: „Blau ist der Himmel“

Eingabe: „ein gutes Beispiel“
Ausgabe: „Beispiel gut a“
Erläuterung: Wenn zwischen zwei Wörtern ein zusätzlicher Leerraum vorhanden ist, reduzieren Sie den Abstand zwischen den umgekehrten Wörtern auf nur eins.

Eingabe: „Hallo Welt!“
Ausgabe: „Welt! Hallo“
Erläuterung: Die Eingabezeichenfolge kann davor oder danach zusätzliche Leerzeichen enthalten, die umgekehrten Zeichen dürfen jedoch nicht enthalten sein.

Gedankengang

1. Segmentierung
Nachdem die Zeichenfolgensegmentierung mit Leerzeichen als Trennzeichen abgeschlossen ist und zwischen den beiden Wörtern x > 1 Leerzeichen vorhanden sind, gibt es in der Wortliste strs x - 1 weitere „leere Wörter“ (d. h. „“ ). Lösung: Durchlaufen Sie die Wortliste in umgekehrter Reihenfolge, fügen Sie Wörter nacheinander zu StringBuilder hinzu und überspringen Sie sie, wenn Sie auf ein leeres Wort stoßen.
2. Doppelzeiger
Durchlaufen der Zeichenfolge s in umgekehrter Reihenfolge, Aufzeichnen der linken und rechten Indexgrenzen i, j des Wortes;
jedes Mal, wenn die Grenze eines Wortes bestimmt wird, wird es der Wortliste res hinzugefügt;
schließlich der Wortliste wird in einen String gespleißt und zurückgegeben.

der Code

1. Segmentierung

public class Solution {
    
    
    public String ReverseSentence(String str) {
    
    
        if(str == null || str.isEmpty() || str.trim().isEmpty()){
    
    
            return str;
        }
        String[] strs = str.trim().split(" ");
		StringBuilder res = new StringBuilder();
		
		for(int i = strs.length - 1; i >= 0; i--) {
    
    
			// String重写了equals方法,用equals即比较值而非地址。不能用“==”
			if(strs[i].equals("")) {
    
    
				continue;
			}
			//System.out.println(strs[i]);
			res.append(strs[i] + " ");
		}
		return res.toString().trim();
    }
}

Zwei, Doppelzeiger

class Solution {
    
    
    public String reverseWords(String s) {
    
    
        s = s.trim(); // 删除首尾空格
        int j = s.length() - 1, i = j;
        StringBuilder res = new StringBuilder();
        while(i >= 0) {
    
    
            while(i >= 0 && s.charAt(i) != ' ') i--; // 搜索首个空格
            res.append(s.substring(i + 1, j + 1) + " "); // 添加单词
            while(i >= 0 && s.charAt(i) == ' ') i--; // 跳过单词间空格
            j = i; // j 指向下个单词的尾字符
        }
        return res.toString().trim(); // 转化为字符串并返回
    }
}

Supongo que te gusta

Origin blog.csdn.net/qq_32301683/article/details/109085097
Recomendado
Clasificación