LeetCode 345 —— 反转字符串中的元音字母

https://leetcode-cn.com/problems/reverse-vowels-of-a-string/

class Solution {
    public String reverseVowels(String s) {
        char[] sToChar = s.toCharArray();
		char[] vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
		int i=0, j=sToChar.length-1;
		char charI='1', charJ='1';
		for(;i<=j && i<sToChar.length && j>=0;) {
			System.out.println("i::" + i + "::j::" + j);
			if(sToChar[i]=='a' || sToChar[i]=='e' || sToChar[i]=='i' || sToChar[i]=='o'  || sToChar[i]=='u' || sToChar[i]=='A'  || sToChar[i]=='E'  || sToChar[i]=='I'  || sToChar[i]=='O'  || sToChar[i]=='U') {
				charI = sToChar[i];
			}else {
				i++;
			}
			
			if(sToChar[j]=='a' || sToChar[j]=='e' || sToChar[j]=='i' || sToChar[j]=='o' || sToChar[j]=='u'|| sToChar[j]=='A'  || sToChar[j]=='E'  || sToChar[j]=='I'  || sToChar[j]=='O'  || sToChar[j]=='U') {
				charJ = sToChar[j];
			}else {
				j--;
			}
			
			if(charI != '1' && charJ != '1') {
				System.out.println(";;;;;;;;;" + "i::" + i + "::j::" + j);
				char temp = charI;
				sToChar[i] = sToChar[j];
				sToChar[j] = temp;
				i++;
				j--;
				charI = '1';
				charJ = '1';
			}
			
		}
		StringBuilder sb = new StringBuilder();
		for(int q=0;q<sToChar.length;q++) {
			sb.append(sToChar[q]);
		}
		return sb.toString();
    }
}

代码改进:

class Solution {
    public String reverseVowels(String s) {
         char[] sToChar = s.toCharArray();
		//char[] vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'};
		int i=0, j=sToChar.length-1;
	
		while(i<j) {
			System.out.println("i::" + i + "::j::" + j + "::sToChar[i]::" + sToChar[i] + "::sToChar[j]::" + sToChar[j]);
			while(!judgeVowels(sToChar[i]) && i<sToChar.length-1) {
				System.out.println("111:::i::" + i);
				i++;
			}
			while(!judgeVowels(sToChar[j]) && j>0) {
				System.out.println("111:::j::" + j);
				j--;
			}
			if(i>=j) break;
			
			char temp = sToChar[i];
			sToChar[i++] = sToChar[j];
			sToChar[j--] = temp;	
			
		}
		StringBuilder sb = new StringBuilder();
		for(int q=0;q<sToChar.length;q++) {
			sb.append(sToChar[q]);
		}
		return sb.toString();
    }

     public static boolean judgeVowels(char c){
	        if(c=='a' || c=='e' || c=='i' || c=='o' || c=='u' || c=='A' || c=='E' || c=='I' || c=='O' || c=='U'){
	            return true;
	        }else{
	        	return false;
	        }
	 }
}

但是,内存和时间消耗还是大,
改进交换数组位置:

			//元音字母互换
            chars[l] = (char) (chars[l] + chars[r]);
            chars[r] = (char) (chars[l] - chars[r]);
            chars[l] = (char) (chars[l] - chars[r]);
           //这种是容易看懂的替换,但是内存消耗看着有点大
            // char temp = chars[l];
            // chars[l] = chars[r];
            // chars[r] = temp;

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值