算法专题六: 模拟
1.替换所有的问号
题目链接:1576. 替换所有的问号 - 力扣(LeetCode)
class Solution {public String modifyString(String ss) {char[] s=ss.toCharArray();int n=s.length;for(int i=0;i<n;i++){if(s[i]=='?'){for(char ch='a';ch<='z';ch++){if((i==0 || ch!=s[i-1]) && (i==n-1 || ch!=s[i+1])){s[i]=ch;break;}}}}return String.valueOf(s);}
}
2.提莫攻击
题目链接:495. 提莫攻击 - 力扣(LeetCode)
class Solution {public int findPoisonedDuration(int[] timeSeries, int duration) {int ret=0;for(int i=1;i<timeSeries.length;i++){int x=timeSeries[i]-timeSeries[i-1];if(x>=duration){ret+=duration;}else{ret+=x;}}return ret+duration;}
}
3.N字形变换
题目链接:6. Z 字形变换 - 力扣(LeetCode)
class Solution {public String convert(String s, int numRows) {if(numRows==1){return s;}int n=s.length();StringBuilder ret=new StringBuilder();int d=2*numRows-2;//处理第一行for(int i=0;i<n;i+=d){ret.append(s.charAt(i));}//处理中间行for(int k=1;k<numRows-1;k++){for(int i=k,j=d-i;i<n || j<n;i+=d,j+=d){if(i<n){ret.append(s.charAt(i));}if(j<n){ret.append(s.charAt(j));}}}//处理最后一行for(int i=numRows-1;i<n;i+=d){ret.append(s.charAt(i));}return ret.toString();}
}
4.外观数列
题目链接:38. 外观数列 - 力扣(LeetCode)
class Solution {public String countAndSay(int n) {String s="1";for(int i=1;i<n;i++){int len=s.length();StringBuilder tem=new StringBuilder();for(int left=0,right=0;right<len;){while(right<len && s.charAt(left)==s.charAt(right)){right++;}tem.append(Integer.toString(right-left));tem.append(s.charAt(left));left=right;}s=tem.toString();}return s;}
}
5.数青蛙
题目链接:1419. 数青蛙 - 力扣(LeetCode)
class Solution {public int minNumberOfFrogs(String c) {char[] croakOfFrogs=c.toCharArray();String s="croak";int len=s.length();int[] hash=new int[len];Map<Character,Integer> index=new HashMap<>();for(int i=0;i<len;i++){index.put(s.charAt(i),i);}for(char ch:croakOfFrogs){if(ch==s.charAt(0)){if(hash[len-1]!=0){hash[len-1]--;}hash[0]++;}else{int i=index.get(ch);if(hash[i-1]!=0){hash[i-1]--;hash[i]++;}else{return -1;}}}for(int i=0;i<len-1;i++){if(hash[i]!=0){return -1;}}return hash[len-1];}
}
希望对大家有所帮助!!!