アルゴリズムを学び、フォースボタンを磨き、ロールに燃料を補給し、大きな工場に入ります!
トピックの説明
入力文字列を逆にする関数を記述します。入力文字列は文字配列sとして指定されます。
別の配列に余分なスペースを割り当てる代わりに、この問題を解決するためにO(1)の余分なスペースを使用して、入力配列を所定の位置に変更する必要があります。
例1:
输入:s = ["h","e","l","l","o"]
输出:["o","l","l","e","h"]
例2:
输入:s = ["H","a","n","n","a","h"]
输出:["h","a","n","n","a","H"]
ヒント:
- 1 <= s.length <= 105
- s[i]はすべてASCIIコードテーブルの印刷可能な文字です
知識ポイントを含む
おそらく誰もがこの質問に対して非常に強い気持ちを持っているに違いありません。結局のところ、困難な問題に直面した場合、それは約束の問題にすぎません。このような単純な質問に直面した場合、激しく打つ必要はなく、彼は合格しました。それ!この質問は配列に関するものです。配列には文字列がありますが、これは効果がありません。配列の一部の機能を使用して、この問題を解決できます。
- 配列は、連続したメモリ空間に格納されている同じタイプのデータのコレクションです。
- 配列の添え字は0から始まります
- メモリ空間内のアレイのアドレスは連続しています
- 文字列も配列です
この問題を解決するために、リンクリストを逆にする元のダブルポインタ方式を直接使用できます。
質疑応答
Java問題解決策1
思考分析
ダブルポインタを使用して、左ポインタが右ポインタを超えない場合、2つのポインタの内容を交換できます
- 2つのポインタを定義する
- 配列をループし、2つのポインターの内容を交換します
class Solution {
public void reverseString(char[] s) {
//使用双指针
int left = 0; //定义左指针
int right = s.length - 1; //定义右指针
char temp; //临时变量用来交换数组元素
while(left < right){
temp = s[left]; //交换元素
s[left] = s[right];
s[right] = temp;
left++; //左指针左移
right--; //右移指针
}
}
}