[算法]反转字符串

    技术2023-07-02  90

    题目

    编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。

    示例

    输入:[“h”,“e”,“l”,“l”,“o”] 输出:[“o”,“l”,“l”,“e”,“h”]

    输入:[“H”,“a”,“n”,“n”,“a”,“h”] 输出:[“h”,“a”,“n”,“n”,“a”,“H”]

    这是一道简单题,没什么说的

    class Solution { public void reverseString(char[] s) { char current = '#'; //思路比较简单,新建一个框用来存放临时数据,从后往前循环的放新数据,注意点是只需要放数组的一半,就可以实现需求,没有s.length/2,那么反转再反转又变回原来的数组了。 for(int i=s.length-1;i>=s.length/2;i--){ char c = s[i]; current = s[s.length-1-i]; s[s.length-1-i] = c; s[i] = current; } } }

    举一反三

    反转字符串中的元音字母(在英文bai中,5个元音字母分别为:dua[ei]、e[i:]、i[ ai]、o[eu]、u[ju:])。

    示例

    输入: “hello” 输出: “holle”

    输入: “leetcode” 输出: “leotcede”

    class Solution { public String reverseVowels(String s) { if(s==null||s.equals("")) return ""; char[]arr = s.toCharArray(); int n = arr.length; //双指针解法 int L = 0; int R = n-1; while (L<R){ //从左边开始找元音字母,直到最右边,或者找到了元音 while (L<n&&!isNeedAdd(arr[L])){ L++; } //同理 while (R>=0&&!isNeedAdd(arr[R])){ R--; } //如果一个原因字母都没有,或者只有一个原因字母,则没有交换的必要了 if(L>=R){ break; } //找到两个元音,交换并继续往中间走 swap(arr,L,R); L++; R--; } //最后这个地方也要注意,不要用arr.toString()返回的是地址,而要用数组重新生成字符串。 return new String(arr); } //交换两个数据 private void swap(char[]arr,int a,int b){ char temp = '#'; temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } //是否是元音字母 private boolean isNeedAdd(char c){ return c=='a'||c=='A'||c=='e'||c=='E'||c=='i'||c=='I'||c=='o'||c=='O'||c=='u'||c=='U'; } }
    Processed: 0.010, SQL: 9