LeetCode 151.文字列の単語を逆転【Java】

タイトルの説明

文字列内の単語を逆にします

ACコード

アイデアは、まず各単語を逆にし、次に文字列全体を逆にします。
1.なぜreverse関数ch=reverse(ch,i,j-1);で、スペースの位置を示すためにjを使用するので、添え字jに対応する値はスペースであり、交換する最後は最初のスペースの前の文字でなければならないため、j-1が必要です。
2.全体の反転を実行するときに、なぜ余分な部品を削除する必要があるのですか?一部の文字列には余分なスペースがある可能性があるため、反転後、余分なスペースはなく、文字列の最初と最後にスペースはなく、単語間にはスペースが1つしかないため、反転後の位置は空になります。次に、これらの位置に別の単語があります。結果にはこれらの余分な文字は必要ないため、それらをインターセプトする必要があります。

/*
                    the sky is blue
先反转每个单词:      eht yks si eulb
然后反转整个字符串:   blue is sky the
*/
class Solution {
    public String reverseWords(String s) {
        int k=0;
        char[] ch=s.toCharArray();
        for(int i=0;i<ch.length;i++){
        	//寻找第一个单词的第一个位置,第一个字符可能是空格
            while(i<ch.length&&ch[i]==' ')i++;
            if(i==ch.length)break;
            int j=i;
            //通过空格分隔单词
            while(j<ch.length&&ch[j]!=' ')j++;
            //反转单词
            ch=reverse(ch,i,j-1);
            //添加空格分割单词和单词
            if(k!=0) ch[k++]=' ';
            //修改字符数组
            while(i<j){
                ch[k++]=ch[i++];
            } 
        }
        //去掉多余部分后的字符串进行整体反转
        StringBuilder sb=new StringBuilder(new String(ch).substring(0,k)).reverse();
		return sb.toString();
    }
	
	//字符串反转
    public char[] reverse(char[] array,int i,int j){
        while(i<j){
            char c=array[i];
            array[i]=array[j];
            array[j]=c;
            i++;j--;
        }
        return array;
    }
}

他にもメソッドがあり、Stringクラスのメソッドを完全に利用でき、ダブルポインターで解決できます。

201件のオリジナル記事を公開 Like9 訪問者10,000以上

おすすめ

転載: blog.csdn.net/weixin_40992982/article/details/105498784