在字符串遍历有两种方式,一是使用toCharArray()方法转化为数组,然后遍历数组,二是使用charAt()方法,那这两种方法谁的效率高呢?我自己有去跑过一些测试案例,但是结果是有时方法一效率高,有时方法二效率高,但是方法二效率高的次数多点。
我去网上搜了相关问题,答案也不是很相同,有个回答是:用toCharArray()方法会多一个将字符串拷贝到数组的过程,所以用charAt()方法效率会高点,这个说法和我测试结果是一致的;但是今天复习String相关知识时,看见黑马的视频中说:使用toCharArray()方法效率会高,因为在使用charAt()方法遍历时会调用其他一些方法,这些方法入栈出栈会花时间,这个结论和我的测试结果不太一样,但是我在力扣刷题时,发现使用多的也确实是toCharArray()方式。
所以这两种方法谁的效率高呢?求解答。
toCharArray()显然会更快一些,因为直接访问数组。但是toCharArray()本身是需要时间和额外内存的。
不知道你这个问题是否已经解决, 如果还没有解决的话:提交的代码如下:
import java.util.HashMap;
import java.util.Map;
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
for (char ch : s.toCharArray()) {
if ('(' == ch || '{' == ch || '[' == ch) stack.push(ch);
if (')' == ch || '}' == ch || ']' == ch) {
if (stack.isEmpty() || stack.pop() != map.get(ch)) {
return false;
}
}
}
return stack.isEmpty();
}
}
结果如下: