大家好,我是你们的晴天学长,今天的算法题思想用到了数组+模拟+枚举三个知识,是一道考察比较全面的题目,题目不难,但是知识的灵活运用还是值得学习的,需要的小伙伴请自取哦!💪💪💪
1 ).使字符串总不同字符的数目相等
2) .算法思路
使字符串总不同字符的数目相等_模拟数组统计
1.建立两个数组统计字符,大小为26
2.把字符统计进去
3.两个for循环
一个控制字符串1的下标,一个控制字符串2的下标
4.交换字符串1的i位置的字符,数量–,字符串2的i位置++,依次为例,字符串2的也给字符串1交换(大于0才换,减少运行时间)
5.统计两个数组中大于0的位置,用num1和num2统计
6.对比num1和num2,相同返回true,不相同把数组的值调整回去,恢复原样,进入下一次循环
7.循环结束,如果还没返回true,就输出false
3 ).代码示例
class Solution {
public static boolean isItPossible(String word1, String word2) {
int arr1[] = new int[26];
int arr2[] = new int[26];
for (int i = 0; i < word1.length(); i++) {
char c = word1.charAt(i);
arr1[c - 'a']++;
}
for (int i = 0; i < word2.length(); i++) {
char c = word2.charAt(i);
arr2[c - 'a']++;
}
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] > 0) {
for (int j = 0; j < arr2.length; j++) {
if (arr2[j] > 0) {
arr1[i]--;
arr1[j]++;
arr2[i]++;
arr2[j]--;
int num1 = 0, num2 = 0;
for (int k = 0; k < arr1.length; k++) if (arr1[k] > 0) num1++;
for (int k = 0; k < arr2.length; k++) if (arr2[k] > 0) num2++;
if (num1 == num2) return true;
arr1[i]++;
arr1[j]--;
arr2[i]--;
arr2[j]++;
}
}
}
}
return false;
}
}
4 ) . 总结
- 数组字符串计数
- 模拟思想
- 枚举