NC61
链接:牛客网NC61
题意、输入、输出:
分析:如题所述,将前一个单词的末尾与后一单词的开头比较,相同消掉。
思路:栈或者模拟栈、以字符为单位入栈,栈为空该单词所以字符入栈,栈不为空比较栈顶元素与当前单词的字符,相同出栈,比较单词的下一个字符,直到不相同后将剩下的单词字符全部入栈,反转输出。
代码:
import java.util.*;
public class Solution {
/**
*
* @param Words string字符串一维数组
* @return string字符串
*/
public String WordsMerge (String[] Words) {
// write code here
StringBuilder hh=new StringBuilder(Words[0]);
for(int i=1;i<Words.length;i++){
int index=hh.length()-1;
int tindex=0;
String hhh=Words[i];
while(index>=0&&tindex<hhh.length()&&hh.charAt(index)==hhh.charAt(tindex)){
tindex++;
index--;
}
hh.delete(index+1,hh.length());
if(tindex<hhh.length())hh.append(hhh.substring(tindex));
}
return hh.toString();
}
}
NC60
链接:牛客网NC60
题意、输入、输出:
分析:如题所述
思路:栈或者模拟栈
代码:
import java.util.*;
public class Solution {
/**
*
* @param s string字符串
* @return string字符串
*/
public String Typing (String s) {
// write code here
char[] str=new char[s.length()];
int cnt=0;
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='<') {
if (cnt > 0) cnt--;
}
else str[cnt++]=c;
}
return new String(str).substring(0,cnt);
}
}
NC55
链接:牛客网NC55
题意、输入、输出:
分析:如题所述
思路:每次出手都翻倍最大值。
代码:
import java.util.*;
public class Solution {
/**
*
* @param n int整型
* @param m int整型
* @param x int整型一维数组
* @return int整型
*/
public int Holy (int n, int m, int[] x) {
// write code here
long sum=0;
long maxx=x[0];
for(int i=0;i<m;i++){
sum+=x[i];
if(x[i]>maxx)maxx=x[i];
}
if(n-sum<=0)return 0;
long need=n-sum+maxx;
int cnt=0;
while(need>maxx){
maxx<<=1;
cnt++;
}
return cnt;
}
}