把字符串分割成字符数组,接着应用ArrayDeque容器作栈,进行操作。注意“.."和“.”的情况。
java版本:
class Solution {
public String simplifyPath(String path) {
String[] nums=path.split("/");
ArrayDeque<String> stack = new ArrayDeque<>();
for(String num:nums){
if(num.equals("..")){
if(!stack.isEmpty()){
stack.pollLast();
}
}else if(num.length()>0 && !num.equals(".")){
stack.offerLast(num);
}
}
StringBuffer res=new StringBuffer();
if(stack.isEmpty()){
res.append("/");
}else{
while(!stack.isEmpty()){
res.append("/");
res.append(stack.pollFirst());
}
}
return res.toString();
}
}
II 018. 有效的回文
class Solution {
public boolean isPalindrome(String s) {
String s_l=s.toLowerCase();
int left=0,right=s.length()-1;
int s_left=0,s_right=0;
int count=0;
while(left<right){
s_left=s_l.charAt(left)-'a';
s_right=s_l.charAt(right)-'a';
if(s_left<-50 || (s_left>-40 && s_left<0) || s_left>=26 ){
left++;
continue;
}
if(s_right<-50 || (s_right>-40 && s_right<0) || s_right>=26 ){
right--;
continue;
}
if(left!=right && s_right==s_left){
count++;
}
if(s_left!=s_right ){
return false;
}
count++;
left++;
right--;
}
if(s.length()<=1){
return true;
}
return true;
}
}
II 020. 回文子字符串的个数
双指针,参考了官方的题解。
class Solution {
public int countSubstrings(String s) {
int n=s.length();
int res=0;
for(int i=0;i<2*n-1;i++){
int l=i/2,r=i/2+i%2;
while(l>=0 && r<n && s.charAt(l)==s.charAt(r)){
l--;
r++;
res++;
}
}
return res;
}
}
网友评论