目录
318.最大单词长度乘积
1. 题目描述
2. 题解
(1)暴力破解
public static int maxProduct(String[] words) {
int Maxnum = 0;
for(int i=0;i<words.length-1;i++) {
for(int j=i+1;j<words.length;j++) {
boolean flag = true;
for(int k=0;k<words[j].length();k++) {//遍历其中一个字符串
if (words[i].contains(String.valueOf(words[j].charAt(k)))) {//判断该字符串中字母是否在另一个字符串中出现
flag = false;
break;
}
}
if(flag && (words[i].length()*words[j].length() > Maxnum)){
Maxnum = words[i].length()*words[j].length();
}
}
}
return Maxnum;
}
输出:
(2) 利用位运算
public static int maxProduct_1(String[] words) {
int n = words.length;
int[] hash = new int[n];
int max = 0;
for(int i = 0; i < n; ++i) {
for(char c : words[i].toCharArray()) {
hash[i] |= 1 << (c-'a');
}
}
for(int i = 0; i < n-1; ++i) {
for(int j = i+1; j < n; ++j) {
if((hash[i] & hash[j]) == 0)
max = Math.max(words[i].length() * words[j].length(), max);
}
}
return max;
}
输出;
1567. 替换所有的问号
1. 题目描述
2. 题解
(1)暴力破解
public static String modifyString(String s) {
StringBuilder ss = new StringBuilder(s);
for(int i=0;i<s.length();i++) {
if(s.charAt(i)=='?') {
if(i>0 && i<s.length()-1) {
for(char j ='a';j<='z';j++) {
if(j != s.charAt(i-1) && j != s.charAt(i+1)) {
ss.setCharAt(i, j); break;
}
}
}
else if (i == 0 && s.length() > 1) {
for(char j ='a';j<='z';j++) {
if(j != s.charAt(i+1)) {
ss.setCharAt(0, j);break;
}
}
}
else if(i == s.length()-1 && s.length() > 1) {
for(char j ='a';j<='z';j++) {
if(j != s.charAt(i-1)) {
ss.setCharAt(s.length()-1, j);break;
}
}
}
else {
ss.setCharAt(s.length()-1, 'a');
}
}
s=ss.toString();
}
return ss.toString();
}
输出:
(2)去边界
public static String modifyString_1(String s) {
char[] ss = ('a'+s+'a').toCharArray();
for(int i=1;i<ss.length-1;i++) {
if(ss[i] == '?') {
for(char j = 'a' ;j<='c';j++) {
if(j!= ss[i-1] && j!= ss[i+1]) {
ss[i] = j;break;
}
}
}
}
return String.valueOf(ss, 1, ss.length-2);
}
输出: