LeetCode - 345. Reverse Vowels of a String
2016-07-06 08:07
253 查看
和前面Reverse String的思想是一样的,同样是需要维护两个指针,一个在开头,一个在结尾,如果遇到元音字母就互相交换它们。注意这里判断原因字母的方法,使用了一个String vowel: "aeiouAEIOU",如果vowel.indexOf(c) == -1,那么说明当前的这个字符不是元音字母。代码如下:
public class Solution {
public String reverseVowels(String s) {
if(s == null || s.length()==0) return s;
String vowels = "aeiouAEIOU";
char[] chars = s.toCharArray();
int start = 0;
int end = s.length()-1;
while(start<end){
while(start<end && vowels.indexOf(chars[start]) == -1){
start++;
}
while(start<end && vowels.indexOf(chars[end]) == -1){
end--;
}
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
return new String(chars);
}
}
注意这里还有一个非常容易出错的地方,就是在while(i < j)的内层循环中只使用while(vowel.indexOf(word.charAt(i)) == -1),这样是不对的,因为这可能会在内层循环中造成i, j的相互越界,也就是可能会出现多交换一次的情况,比如说针对"hello"这个元素,正常的交换应该是交换e和o,但是在这之后,由于内层循环并没有关于i和j的界限,所以接下来i会移动到o的位置,j会移动到i的位置,这样就又造成了一次交换,进而得到了错误的答案。
知识点:
1. 判断一个字符是元音字母的方法,进而引申为判断一个字符在不在可枚举数量的字符范围内的方法
2. 注意在写while循环的时候,因为在while中并没有针对条件变化的情况,所以在写完循环体的大致内容之后,要检查下循环变量会不会发生改变,这一点经常出错
public class Solution {
public String reverseVowels(String s) {
if(s == null || s.length()==0) return s;
String vowels = "aeiouAEIOU";
char[] chars = s.toCharArray();
int start = 0;
int end = s.length()-1;
while(start<end){
while(start<end && vowels.indexOf(chars[start]) == -1){
start++;
}
while(start<end && vowels.indexOf(chars[end]) == -1){
end--;
}
char temp = chars[start];
chars[start] = chars[end];
chars[end] = temp;
start++;
end--;
}
return new String(chars);
}
}
注意这里还有一个非常容易出错的地方,就是在while(i < j)的内层循环中只使用while(vowel.indexOf(word.charAt(i)) == -1),这样是不对的,因为这可能会在内层循环中造成i, j的相互越界,也就是可能会出现多交换一次的情况,比如说针对"hello"这个元素,正常的交换应该是交换e和o,但是在这之后,由于内层循环并没有关于i和j的界限,所以接下来i会移动到o的位置,j会移动到i的位置,这样就又造成了一次交换,进而得到了错误的答案。
知识点:
1. 判断一个字符是元音字母的方法,进而引申为判断一个字符在不在可枚举数量的字符范围内的方法
2. 注意在写while循环的时候,因为在while中并没有针对条件变化的情况,所以在写完循环体的大致内容之后,要检查下循环变量会不会发生改变,这一点经常出错
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- android上改变listView的选中颜色
- String.intern
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- PostgreSQL ERROR: invalid escape string 解决办法
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术
- C++实现string存取二进制数据的方法
- C#中string和StingBuilder内存中的区别实例分析
- 详解C++中实现继承string类的MyString类的步骤
- PHP STRING 陷阱原理说明
- c#中 String和string的区别介绍
- C#实现的图片、string相互转换类分享
- asp.net String.IsNullOrEmpty 方法
- JavaScript中字符串(string)转json的2种方法
- C#中string用法实例详解
- 浅析C#中StringBuilder类的高效及与String的对比