编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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”]
反转字符串中的元音字母(在英文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'; } }