package cn.fansunion.leecode.string; /** * 反转字符串 <br/> * * 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 * * 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 * * 来源:力扣(LeetCode) 链接:力扣 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 * * @author wen.lei@brgroup.com * * 2022-1-28 */ public class ReverseString // 示例 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"] public void reverseString( char [] s) if (s == null || s.length <= 1 ) return ;
int maxIndex = s.length / 2 ; char tmp = 0 ; int endIndex = s.length - 1 ; for ( int index = 0 ; index < maxIndex; index++) //找对称的位置 int swapIndex = endIndex- index; swap(s, index, swapIndex,tmp);
/** * 交换数组中的2个元素,要求空间O(1),传过来。子方法,确保代码清晰 * @param s * @param swapIndex1 * @param swapIndex2 * @param tmp */ private void swap( char [] s, int swapIndex1, int swapIndex2, char tmp) if (s == null ) throw new NullPointerException( "char array is null" );
if (swapIndex1 < 0 || swapIndex1 > s.length - 1 ) throw new IllegalArgumentException( "swapIndex1 out of bound" );
if (swapIndex2 < 0 || swapIndex2 > s.length - 1 ) throw new IllegalArgumentException( "swapIndex2 out of bound" );
if (swapIndex1 == swapIndex2) return ;
tmp = s[swapIndex1]; s[swapIndex1]=s[swapIndex2]; s[swapIndex2]=tmp;
|