我有一个动态字符串类,它有一个char数组text
,它有一个reverse()
方法,可以反转数组的内容。
但我不明白算法的工作原理。你能帮助我完成代码吗?
public void reverse() {
char tmp;
for(int i=0; i<length/2; i++) {
tmp = text[i];
text[i] = text[length-1-i];
text[length-1-i] = tmp;
}
}
让我们拿一个字符串并试图扭转它。字符串是“编码器”
length
= string的长度= 5(在这种情况下)
length/2
= 5/2 = 2(因为我们划分两个整数所以它不会是2.5)所以for循环从0到2(0,1,NOT 2)
当i
= 0时:
temp
='c'text[0]
现在将持有text[5 - 1 - 0]
所以现在文字是'roder'(中级答案)
text[4]
现在将持有'c'所以现在文字是'rodec'
当i
= 1时:
temp
='o'text[1]
现在将举行text[5 - 1 - 1]
所以现在文字是'redec'(中级答案)
text[3]
现在将持有'o'
所以现在文字是'redoc'
for循环直到length/2
的原因是因为,我们正在从两端交换字符,并在中间停止。
我希望这有帮助。现在尝试使用更长的字符串并按照相同的步骤操作。
你应该像这样思考和调试循环中的所有步骤
Char[] text ='abcd'
text.length = 4
第一步,
temp = 'a'
text[0] = text[3] // text[0] = 'd'
text[3] = temp // text[3] = 'a'
// your text = 'dbca'
第二步,
temp = 'b'
text[1] = 'c'
text[2] = 'b'
// your text = 'dcba'
您可以在两次中找到反向文本 - > size / 2